我了解 Floyd 循环检测算法的概念。得出的结论是,如果乌龟的行进速度是兔子的两倍,并且如果乌龟在一个循环中领先 k 米,那么乌龟和兔子将在循环之前遇到 k 米。
在单链表的情况下,指针 A 的移动速度是指针 B 的两倍。这意味着如果指针 B 需要 k 步才能到达循环的入口点(我们还不知道它在哪里),指针A 在循环内已经有 k 个节点的领先优势。因此,两个指针将在循环的入口点之前遇到 k 个节点。因此,如果我们将指针 B 移回头指针并将指针 A 保持在交汇点(现在两个指针都离入口点有 k 个节点),并以相同的速度移动,它们将在入口点相遇循环。
您如何证明该算法将在以下边界情况下工作?
- 最后一个节点循环回头部的链表。在这种情况下,起始值 k 是多少?
- 一个超长的链表,1000个节点,最后有一个小循环,3个节点。指针 A 将领先 1000,这意味着当指针 B 到达循环的入口点时,A 已经循环了很多次。
- 如果有 1 个节点的循环怎么办?
这不是家庭作业。一位面试官告诉我,如果我有一个小循环,这个算法将无法工作。他没有解释原因。