环形链表

Posted wangjiaq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了环形链表相关的知识,希望对你有一定的参考价值。

分享简单算法:给定一个链表,判断链表中是否有环

思路

我们可以通过检查一个结点此前是否被访问过来判断链表是否为环形链表。常用的方法是使用哈希表。

算法

我们遍历所有结点并在哈希表中存储每个结点的引用(或内存地址)。如果当前结点为空结点 null(即已检测到链表尾部的下一个结点),那么我们已经遍历完整个链表,并且该链表不是环形链表。如果当前结点的引用已经存在于哈希表中,那么返回 true(即该链表为环形链表)。

语言:java

public boolean hasCycle(ListNode head) {
    Set<ListNode> nodesSeen = new HashSet<>();
    while (head != null) {
        if (nodesSeen.contains(head)) {
            return true;
        } else {
            nodesSeen.add(head);
        }
        head = head.next;
    }
    return false;
}

注意:判断环形链表就是依据前后遍历的结点是不是一样,一样就是有环,不一样就继续遍历,如果遍历到尾部也没有环即不是环形链表。












以上是关于环形链表的主要内容,如果未能解决你的问题,请参考以下文章

环形链表入口节点

java刷题--141环形链表

单向环形链表解决Josephu(约瑟夫)问题

单向环形链表解决Josephu(约瑟夫)问题

环形链表问题(判环求入口点)

环形链表问题(判环求入口点)