1. 程式人生 > >[LintCode] 帶環連結串列 II Linked List Cycle II

[LintCode] 帶環連結串列 II Linked List Cycle II

給定一個連結串列,如果連結串列中存在環,則返回到連結串列中環的起始節點的值,如果沒有環,返回null。
樣例
給出 -21->10->4->5, tail connects to node index 1,返回10
挑戰
不使用額外的空間

Given a linked list, return the node where the cycle begins.
If there is no cycle, return null.
Example
Given -21->10->4->5, tail connects to node index 1,return 10
Challenge
Follow up:
Can you solve it without using extra space?

/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */ 
public class Solution {
    /**
     * @param head: The first node of linked list.
     * @return: The node where the cycle begins. 
     *           if there is no cycle, return null
     */
public ListNode detectCycle(ListNode head) { if(null == head || head.next == null || head.next.next == null) return null; ListNode fast = head, slow = head; while(true) { if(slow == null || fast == null || fast.next == null) { return null; } fast = fast.next.next; slow = slow.next; if
(fast == slow) { break; } } slow = head; while(true) { fast = fast.next; slow = slow.next; if(fast == slow) { return fast; } } } }