假设您在Java中有一个链表结构.它由节点组成:
class Node {
Node next;
// some user data
}
Run Code Online (Sandbox Code Playgroud)
每个节点都指向下一个节点,最后一个节点除外.假设列表有可能包含一个循环 - 即最终的节点,而不是具有空值,具有对列表中的一个节点的引用.
什么是最好的写作方式
boolean hasLoop(Node first)
Run Code Online (Sandbox Code Playgroud)
true如果给定的Node是带循环的列表的第一个,它将返回,false否则?你怎么写,这需要一个恒定的空间和合理的时间?
这是一个循环列表的图片:

我知道Tortoise和Hare的会议总结了循环的存在,但是如何将兔子移动到链接列表的开头同时将野兔保持在会场,然后一步一步地移动两个步骤使它们在循环的起始点相遇?
在弗洛伊德算法的第一部分中,兔子每走一步就移动两步。如果乌龟和兔子相遇,则存在一个循环,并且相遇点是循环的一部分,但不一定是循环中的第一个节点。
如果圆圈存在,我无法理解为什么两个指针必须在某个时候相遇?用“三步”代替“两步”怎么样?
希望有人能证明给我看...