編寫一個程序系宫,找到兩個單鏈表相交的起始節(jié)點凌唬。
如下面的兩個鏈表:
在節(jié)點 c1 開始相交腹殿。
示例 1:
輸入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
輸出:Reference of the node with value = 8
輸入解釋:相交節(jié)點的值為 8 (注意舷蒲,如果兩個鏈表相交則不能為 0)。從各自的表頭開始算起,鏈表 A 為 [4,1,8,4,5]昧捷,鏈表 B 為 [5,0,1,8,4,5]闲昭。在 A 中,相交節(jié)點前有 2 個節(jié)點靡挥;在 B 中序矩,相交節(jié)點前有 3 個節(jié)點。
示例 2:
輸入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
輸出:Reference of the node with value = 2
輸入解釋:相交節(jié)點的值為 2 (注意跋破,如果兩個鏈表相交則不能為 0)簸淀。從各自的表頭開始算起,鏈表 A 為 [0,9,1,2,4]毒返,鏈表 B 為 [3,2,4]租幕。在 A 中,相交節(jié)點前有 3 個節(jié)點拧簸;在 B 中劲绪,相交節(jié)點前有 1 個節(jié)點。
示例 3:
輸入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
輸出:null
輸入解釋:從各自的表頭開始算起盆赤,鏈表 A 為 [2,6,4]贾富,鏈表 B 為 [1,5]。由于這兩個鏈表不相交牺六,所以 intersectVal 必須為 0颤枪,而 skipA 和 skipB 可以是任意值。
解釋:這兩個鏈表不相交兔乞,因此返回 null汇鞭。
注意:
如果兩個鏈表沒有交點,返回 null.
在返回結(jié)果后庸追,兩個鏈表仍須保持原有的結(jié)構(gòu)。
可假定整個鏈表結(jié)構(gòu)中沒有循環(huán)台囱。
程序盡量滿足 O(n) 時間復(fù)雜度淡溯,且僅用 O(1) 內(nèi)存。
鏈接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists
解題思路:
解體答案:
/**
* 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 pA = headA, pB = headB
while(pA || pB) {
if(pA === pB) return pA
pA = pA === null ? headB : pA.next
pB = pB === null ? headA : pB.next
}
return null;
};