/* * 142. Linked List Cycle II * 11.28 by Mingyang * 这个题目一开始自己做的时候把方法搞错了,这个是先快慢相遇,相遇后快的移动到head * 慢的快的一步一步走,直到相遇就是我们最终的点 */ public static ListNode detectCycle(ListNode head) { ListNode slow = head; ListNode fast = head; while (true) { if (fast == null || fast.next == null) { return null; // 遇到null了,说明不存在环 } slow = slow.next; fast = fast.next.next; if (fast == slow) { break; // 第一次相遇在Z点 } } slow = head; // slow从头开始走, while (slow != fast) { // 二者相遇在Y点,则退出 slow = slow.next; fast = fast.next; } return slow; }