题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
解题思路
- 假设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a
- 当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B
- 同样地,当访问链表 B 的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A。这样就能控制访问 A 和 B 两个链表的指针能同时访问到交点。
代码实现
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function FindFirstCommonNode(pHead1, pHead2)
{
// write code here
let p1=pHead1;
let p2=pHead2;
while(p1!=p2){
p1 = (!p1)? pHead1:p1.next;
p2 = (!p2)? pHead2:p2.next;
}
return p1;
}