题解 | #两个链表的第一个公共结点#

两个链表的第一个公共结点

http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

如果链表A和B有一个为空,两者无法相交,返回null。 都不为空时,创建p1和p2分别指向A和B的头节点。p1和p2不相等就移动p1,p2遍历两个链表。 alt

当p1走到尾指向null,p2指向c3时,将p1移动到链表B的头节点。 alt

p1往前走到b2,同时p2走到未指向null,将p2移动链表A的头节点。

alt 变成这样: alt 同时再移动下一个节点就能找到相交节点 alt

这样做的原因是让两个指针移动的步长相等,步长相等,如果有相交的节点,就可以同时到达,跳出循环,返回p1或p2 alt 如果没有相交的节点,两个指针会遍历完两个链表,都会指向null,返回,符合题意。

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function FindFirstCommonNode(pHead1, pHead2)
{
    // write code here
     if(!pHead1 || !pHead2) return null;

    let p1 = pHead1;
    let p2 = pHead2;

    while(p1 !== p2){
        if(p1 == null){
            p1 = pHead2;
        }else{
            p1 = p1.next;
        }

        if(p2 == null){
            p2 = pHead1;
        }else{
            p2 = p2.next;
        }
    }

    return p1;
}
module.exports = {
    FindFirstCommonNode : FindFirstCommonNode
};
全部评论

相关推荐

2024-12-21 18:48
西安邮电大学 C++
黑皮白袜臭脚体育生:按使用了什么技术解决了什么问题,优化了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经390star,牛客上有完整文档教程
点赞 评论 收藏
分享
01-17 12:35
吉首大学 Java
写不来代码的小黑:这不就是想白嫖方案吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
01-24 15:05
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客企业服务