如何确定链表是否包含循环?

时间:2010-06-08 22:13:43

标签: linked-list

  

可能重复:
  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)来确定链接列表(任何类型)是否包含循环?你不能假设循环从第一个节点开始(当然,循环不必包含所有节点)。

我找不到答案,虽然我觉得这很简单......

3 个答案:

答案 0 :(得分:11)

易。保持两个指向列表的指针。在每个步骤中,通过单个链接前进一个指针,并通过两个链接前进另一个指针。测试它们是否指向相同的元素。如果是这样,你就有一个循环。如果没有,请重复,直到找到循环或到达列表末尾。

答案 1 :(得分:1)

可能与检查图表是否为树(树木没有周期)的技术相同,请参阅this this question。它建议使用拓扑排序或深度优先搜索。

答案 2 :(得分:-1)

我上周在真实的实时代码中遇到了这个问题。

我所做的只是保留了第一个元素的指针(链接)。然后,当我遍历列表时,如果我再次获得该指针,我知道有一个循环。