可能重复:
find whether a loop in a linked list without two pointers
How to determine if a linked list has a cycle using only two memory locations.
Best algorithm to test if a linked list has a cycle
在准备面试时,我遇到了以下问题:
如何使用额外的空间复杂度O(1)来确定链接列表(任何类型)是否包含循环?你不能假设循环从第一个节点开始(当然,循环不必包含所有节点)。
我找不到答案,虽然我觉得这很简单......
答案 0 :(得分:11)
易。保持两个指向列表的指针。在每个步骤中,通过单个链接前进一个指针,并通过两个链接前进另一个指针。测试它们是否指向相同的元素。如果是这样,你就有一个循环。如果没有,请重复,直到找到循环或到达列表末尾。
答案 1 :(得分:1)
可能与检查图表是否为树(树木没有周期)的技术相同,请参阅this this question。它建议使用拓扑排序或深度优先搜索。
答案 2 :(得分:-1)
我上周在真实的实时代码中遇到了这个问题。
我所做的只是保留了第一个元素的指针(链接)。然后,当我遍历列表时,如果我再次获得该指针,我知道有一个循环。