链接列表中可能存在循环,如何确定循环在链接列表中的位置。
答案 0 :(得分:5)
如果有循环,它不再是链表。这是一个有向图。循环称为循环。
在图表中查找循环的一种方法是遍历列表,标记每个项目。如果您发现已标记的项目,则表示您已找到一个循环。
答案 1 :(得分:2)
通过保存对节点的引用(例如,列表顶部的引用)并开始迭代列表,可以判断链表中是否存在循环。如果在某个时刻到达列表的末尾(空值),则没有循环。但是,如果您碰巧再次找到先前保存的相同节点,那么您知道该列表是循环的。无论哪种方式,停止迭代。
例如,在Java中,此方法将告诉您Node
的链接列表是否为循环:
public boolean isCircular(Node list) {
Node current = list;
while (current != null) {
if (current.next == list)
return true;
current = current.next;
}
return false;
}
编辑:
对于在链表中查找任意循环的一般解决方案,请阅读Floyd's cycle-finding algorithm(a.k.a。“乌龟和野兔”算法)。在之前的post中有一个很好的Java实现。