题目描述
输入两个链表,找出它们的第一个公共节点。
示例图
解题思路
有两种情况,一种是两个链表有公共节点,一种是没有公共节点。此题较为巧妙的解法是利用双指针去走自己的路和别人的路。当有公共节点时,分别设置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; // 返回找到的公共节点
};