1. 程式人生 > 其它 >【劍指offer】刷題 之 用javascript 實現尋找兩個連結串列的第一個公共節點

【劍指offer】刷題 之 用javascript 實現尋找兩個連結串列的第一個公共節點

技術標籤:劍指Offer連結串列leetcode指標js

文章目錄

題目描述

輸入兩個連結串列,找出它們的第一個公共節點。

示例圖
在這裡插入圖片描述
在這裡插入圖片描述

解題思路

有兩種情況,一種是兩個連結串列有公共節點,一種是沒有公共節點。此題較為巧妙的解法是利用雙指標去走自己的路別人的路。當有公共節點時,分別設定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; // 返回找到的公共節點 };