可能的重复问题:
查找链表中是否有循环,不使用两个指针
如何仅使用两个内存位置确定链表是否具有循环。
测试链表是否具有循环的最佳算法
在为工作面试做准备时,我遇到了以下问题:
如何使用O(1)的额外空间复杂度确定链表(任何类型)是否包含循环?您不能假设循环从第一个节点开始(当然,循环不必包含所有节点)。
我找不到答案,尽管我觉得它很简单...
可能的重复问题:
查找链表中是否有循环,不使用两个指针
如何仅使用两个内存位置确定链表是否具有循环。
测试链表是否具有循环的最佳算法
在为工作面试做准备时,我遇到了以下问题:
如何使用O(1)的额外空间复杂度确定链表(任何类型)是否包含循环?您不能假设循环从第一个节点开始(当然,循环不必包含所有节点)。
我找不到答案,尽管我觉得它很简单...
简单。将两个指针定位在链表中。每一步,一个指针向前移动一个链接,另一个指针向前移动两个链接。测试它们是否指向同一个元素。如果是,则存在一个循环。如果不是,则重复此过程直到找到循环或达到链表的末尾。
上周在实际的代码中我遇到了这个完全相同的问题。
我所做的只是保留一个指针(链接)指向第一个元素。然后当我遍历列表时,如果我再次遇到那个指针,我就知道有一个循环。