Linked List Cycle II ---LeetCode

来源:互联网 发布:idownfor mac 编辑:程序博客网 时间:2024/06/04 00:35

https://leetcode.com/problems/linked-list-cycle-ii/

解题思路:

首先推荐两篇博文,写的很全面。
http://www.cnblogs.com/hiddenfox/p/3408931.html
http://blog.csdn.net/cs_guoxiaozhu/article/details/14209743

Linked List

如果链表有环,那么 slow 走的路程是 fast 的一半。即:2(a+b) = a+b+c+b => a = c.
所以,在 slow 与 fast 相遇后,让 slow 回到起点,fast 在 Z 点,一起走相遇的点就是环的交点 Y 点。

/** * 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 slow = head, fast = head;        while(true) {            if(fast.next == null || fast.next.next == null)                return null;            slow = slow.next;            fast = fast.next.next;            if(slow == fast) break;        }        slow = head;        while(slow != fast) {            slow = slow.next;            fast = fast.next;        }        return slow;    }}
0 0