141. Linked List Cycle
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
题意:
判断一个链表是否为一个环?(能否使用O(1)的空间复杂度?)
思路:
在做过之前的题:287. Find the Duplicate Number 之后,再看这题就比较容易了
首先不考虑空间复杂度,就可以使用 Hashset 来做,判断是否遍历过该结点就好
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; }
如果该链表为环的话,一个快指针和慢指针一定是会相遇的;如果不是环,就会出现下一个节点为空节点的情况。
public boolean hasCycle(ListNode head) { if (head == null || head.next == null) { return false; } ListNode slow = head; ListNode fast = head.next; while (slow != fast) { if (fast == null || fast.next == null) { return false; } slow = slow.next; fast = fast.next.next; } return true; }