【剑指Offer刷题:JavaScript实现】两个链表的公共交点

参考链接

题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)

解题思路

  1. 假设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a
  2. 当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B
  3. 同样地,当访问链表 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;
}

你可能感兴趣的:(前端面试,剑指Offer)