环形链表

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

思路

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

算法

我们遍历所有结点并在哈希表中存储每个结点的引用(或内存地址)。如果当前结点为空结点 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;
}

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

原文地址:https://www.cnblogs.com/Wangjiaq/p/9415808.html