解题思路: 两条链表相加总数一样,最后那几个元素是公共的
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 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) {
// 方法一
// if(headA == null || headB == null) {
// return null
// }
// let pA = headA,pB = headB;
// while(pA != pB) {
// pA = pA == null ? headB : pA.next
// pB = pB == null ? headA : pB.next
// }
// return pA
// 方法二
let l1 = 0, l2 = 0, diff = 0;
let head1 = headA, head2 = headB;
while (head1 != null) {
l1++
head1 = head1.next
}
while (head2 != null) {
l2++
head2 = head2.next
}
// 经过上面两个while的干活, head1 和 head2的值已经是null了,所以下面记得重新指回去
if (l1 < l2) {
head1 = headB
head2 = headA
diff = l2 - l1
} else {
head1 = headA
head2 = headB
diff = l1 - l2
}
for (let i = 0; i < diff; i++) {
head1 = head1.next
}
while (head1 != null && head2 != null) {
if (head1 == head2) {
return head1
}
head1 = head1.next;
head2 = head2.next
}
return null
};