环形链表

题目链接:https://leetcode-cn.com/problems/linked-list-cycle/

解法一:

/**
 * 通过检查一个结点此前是否被访问过来判断链表是否为环形链表,
 * 使用哈希表来存储之前的遍历结果。时间复杂度 O(n)。
 *
 * 但使用哈希表时,new 对象与映射寻址也需要的时间,虽然时间量级为 O(1),
 * 但实际时间比 O(1) 大一些。所以,使用哈希表会比双指针的解法,实际耗费时间多一些。
 */
public boolean byHashSet(ListNode head){
    Set<ListNode> visitedSet = new HashSet<>();
    while (head != null){
        if (visitedSet.contains(head)){
            return true;
        }else {
            visitedSet.add(head);
        }
        head = head.next;
    }
    return false;
}

解法二:

最后更新于

这有帮助吗?