【劍指offer】刷題 之 用javascript 實現尋找兩個連結串列的第一個公共節點
阿新 • • 發佈:2021-02-04
文章目錄
題目描述
輸入兩個連結串列,找出它們的第一個公共節點。
示例圖
解題思路
有兩種情況,一種是兩個連結串列有公共節點,一種是沒有公共節點。此題較為巧妙的解法是利用雙指標去走自己的路和別人的路。當有公共節點時,分別設定A,B不相交的路程為La,Lb,公共路程為Lc,則A走的總路程為La + Lc +Lb,B走過的路程為Lb + Lc + La 所以走過的路是一樣的必然在c1點相遇,此時返回他們的指標即可。而沒有相交的情況下,他們只是少了Lc,雖然不會相遇,但是必然同時指向NULL。
上參考程式碼
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} headA
* @param {ListNode} headB
* @return {ListNode}
*/
var getIntersectionNode = function(headA, headB) {
let [node1, node2] = [headA, headB] ;
while(node1 != node2) {
node1 = (node1 != null) ? node1.next : headB;
node2 = (node2 != null) ? node2.next : headA;
}
return node1; // 返回找到的公共節點
};