LeetCode題解:160.相交鏈表

設計鏈表

一、LeetCode題解

瞧一瞧~

二、算法題

題目

給定一個鏈表,返回鏈表開始入環的第一個節點。 如果鏈表無環,則返回 null。如果有環,則確定它的入口位置。

注意:

如果兩個鏈表沒有交點,返回 null.
在返回結果後,兩個鏈表仍須保持原有的結構。
可假定整個鏈表結構中沒有循環。
程序儘量滿足 O(n) 時間複雜度,且僅用 O(1) 內存。

解法一(雙指針)

思路
  • 定義A、B節點對應headA、headB鏈表
  • 如果兩個鏈表相交,那麼他們的共同點就是相交節點及以後的節點相等;
  • 在未知長度的鏈表中,爲了保證兩個節點走相同的路程。
    • A節點走完後,走B節點,假設A鏈表交點前的節點數尾a
    • B節點走完後,走A節點,假設A鏈表交點前的節點數尾b
    • 如果存在交點:A和B在相遇前都走了 a+共同節點+b,此時A === B
代碼
var getIntersectionNode = function(headA, headB) {
    var A = headA
    var B = headB
    while(A || B){
        if(A === B) return A
        A = A ? A.next : headB
        B = B ? B.next : headA
    }
    return null
};
結果

在這裏插入圖片描述

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