如何确定链接列表中循环的位置

时间:2012-05-10 02:02:29

标签: java data-structures linked-list

链接列表中可能存在循环,如何确定循环在链接列表中的位置。

2 个答案:

答案 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实现。