链表循环检测algorithm
我在网上读了一些关于如何在链表中find一个面试问题的方法,解决scheme(Floyd的循环寻找algorithm)有两个指针,一个比另一个快两倍,然后检查他们是否再次相遇。
我的问题是:为什么我不能只固定一个指针,只要每次向前移动另一个指针?
因为第一个(不移动的)指针可能不在循环中,所以指针永远不会相遇。 (请记住,循环可能只包含部分列表。)
因为可能不是完整的linkedList在循环内。
对于链表列套检测algorithm,您需要两个指针:
只要第一个指针是牛仔的地方,就不会检测到循环。 但如果你逐步向前移动,它最终会进入循环。
顺便说一下,套索是图论的终点技术,牛仔不是。
因为循环可能不包含第一个指针指向的元素。
例如,如果第一个指针指向元素1并且链表后面有一个循环(1-> 2-> 3-> 4-> 2),那么您的algorithm将不会检测到它。