假设您在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否则?你怎么写,这需要一个恒定的空间和合理的时间?
这是一个循环列表的图片:

有没有人知道一个算法来查找链表是否只使用两个变量来遍历列表.假设您有一个链接的对象列表,它与哪种类型的对象无关.我在一个变量中有一个指向链表头部的指针,我只有一个其他变量来遍历列表.
所以我的计划是比较指针值以查看是否有任何指针相同.该列表的大小有限,但可能很大.我可以将两个变量都设置为头部,然后用另一个变量遍历列表,总是检查它是否等于另一个变量,但是,如果我确实打了一个循环,我将永远不会离开它.我认为它与遍历列表和比较指针值的不同速率有关.有什么想法吗?