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

确定链表是否有循环的最佳(暂停)算法是什么?
[编辑]对时间和空间的渐近复杂性的分析将是甜蜜的,因此可以更好地比较答案.
[编辑]原始问题没有解决超过1的节点,但有一些关于它的讨论.这个问题更像是"在有向图中检测周期的最佳算法".