链表循环检测algorithm

我在网上读了一些关于如何在链表中find一个面试问题的方法,解决scheme(Floyd的循环寻找algorithm)有两个指针,一个比另一个快两倍,然后检查他们是否再次相遇。

我的问题是:为什么我不能只固定一个指针,只要每次向前移动另一个指针?

因为第一个(不移动的)指针可能不在循环中,所以指针永远不会相遇。 (请记住,循环可能只包含部分列表。)

因为可能不是完整的linkedList在循环内。

对于链表列检测algorithm,您需要两个指针:

在这里输入图像说明

只要第一个指针是牛仔的地方,就不会检测到循环。 但如果你逐步向前移动,它最终会进入循环。


顺便说一下,套索是图论的终点技术,牛仔不是。

因为循环可能不包含第一个指针指向的元素。

例如,如果第一个指针指向元素1并且链表后面有一个循环(1-> 2-> 3-> 4-> 2),那么您的algorithm将不会检测到它。