/* * @lc app=leetcode id=142 lang=java * * [142] Linked List Cycle II */ // @lc code=start /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { /** * 2 * k - s - (k - s) = p * r * 2 * k - s - k + s = p * r * k = p * r, δΈ” k > s * * s + p * r + m - 2m = q * r * s = q * r - p * r + m * * @param head * @return */ public ListNode detectCycle(ListNode head) { if(head == null) { return null; } Set tracked = new HashSet<>(); ListNode cur = head, r = null; while(cur != null) { if(tracked.contains(cur)) { r = cur; break; } tracked.add(cur); cur = cur.next; } return r; } } // @lc code=end