leetCode 142 Linked List Cycle II (java版解析)

大致題意:如果單鏈表有環,找出環的入口節點(環的連接點)

  

第一次相遇時slow走過的距離:a+b,fast走過的距離:a+b+c+b。
因爲fast的速度是slow的兩倍,所以fast走的距離是slow的兩倍,有 2(a+b) = a+b+c+b,可以得到a=c(這個結論很重要!)。

public class ListNode(int x) {

int data;

ListNode next;

public ListNode(int data) {

    this.data = data;

    this.next = null;

}

}

public ListNode getNode(ListNode head) {

ListNode fast = head;

ListNode slow = head;

while(slow!= null && fast.next != null) {

    slow = slow.next;

    fast = fast.next.next;

    if(slow == fast) break;

}

if(fast == null || fast.next == null) return null;

slow = head;

while(slow != fast) {

    slow = slow.next;

    fast = fast.next;

}

return slow;

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章