201得票22回答
如何在循环链表中找到环的起点节点?

我知道乌龟和兔子相遇的地方标志着一个循环的存在,但是当我们将乌龟移动到链表的开头并保持兔子在相遇的地方,然后两个指针都每次向前移动一步时,它们如何会聚到循环的起点呢?

83得票10回答
为什么在查找链表中的循环时要将指针增加两个,而不是3、4或5个?

我看过这个问题,其中讨论了在链表中找到循环的算法。我已经阅读了Floyd's cycle-finding algorithm的解决方案,在很多地方提到我们必须采取两个指针。一个指针( slower/tortoise )每次增加1,另一个指针( faster/hare )每次增加2。当它们相等时...

45得票3回答
链表循环检测算法

我在网上看到了一些关于如何判断链表中是否存在循环的面试问题,其中提出的解决方案 (Floyd's cycle-finding algorithm) 是使用两个指针,其中一个比另一个快2倍,然后检查它们是否再次相遇。 我的问题是:为什么我不能只保持一个指针不动,而是每次将另一个指针向前移动1步呢?

15得票4回答
使用“龟兔赛跑算法”检测链表中的循环

我知道为了检测链表中的循环,可以使用乌龟和兔子的方法,它保持两个指针(慢的和快的)。但是,在阅读维基百科和其他资源后,我不明白为什么可以保证这两个指针在O(n)时间复杂度内相遇。

8得票1回答
如何在Agda中实现Floyd的乌龟兔子算法?

我想将以下Haskell代码翻译成Agda: import Control.Arrow (first) import Control.Monad (join) safeTail :: [a] -> [a] safeTail [] = [] safeTail (_:xs) = ...

8得票5回答
如何在链表中找到循环的起始节点?

根据弗洛伊德循环查找算法,乌龟和兔子相遇的点说明链表中的循环性质。 为了找到循环中的起始节点,我们将乌龟指针初始化为链表的头部,并开始逐一增加兔子和乌龟指针。他们相遇的地方就是循环的起始节点。 请告诉我如何在给定情况下运作。 链表如下: 1->2->3->4->...