题目
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
大致意思
给出两个链表,找到他们相加的点,如果没有的话,就返回null
解决方案
- 我们让两条链表分别从各自的开头开始往后遍历,当其中一条遍历到末尾时,我们跳到另一个条链表的开头继续遍历。
- 两个指针最终会相等
- 一种情况是在交点处相遇
- 另一种情况是在各自的末尾的空节点处相等。
- 为什么一定会相等呢,因为两个指针走过的路程相同,是两个链表的长度之和,所以一定会相等。
源代码
var getIntersectionNode = function(headA, headB) {
var a = headA;
var b = headB;
while (a !== b) {
a = a ? a.next : headB;
b = b ? b.next : headA;
}
return a;
};