Given a linked list, return the node where the cycle begins. If there is no cycle, return null
.html
Note: Do not modify the linked list.node
Follow up:
Can you solve it without using extra space?spa
快慢指針,參考LeetCode - 141. Linked List Cycle指針
先判斷是否有環,記錄第一次相遇位置,而後快指針指向head指針,同步走,再次相遇時的節點即爲環的入口。code
證實:TODOhtm
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode detectCycle(ListNode head) { if (head == null) return null; ListNode fast = head, slow = head; int cnt = 0; while (true) { if (fast == null) return null; if (cnt > 0 && fast == slow) break; slow = slow.next; fast = fast.next; if (slow == null || fast == null) return null; fast = fast.next; cnt ++; } fast = head; while (fast != slow) { fast = fast.next; slow = slow.next; } return fast; } }