剑指offer-36:两个链表的第一个公共结点

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

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&&tqId=11189&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

使用双指针法

考虑到两个链表的初始长度可能不同,因此需要通过一些手段对两个链表进行处理。
解决方法:a+b = b+a
当a链表循环结束,就开始循环b链表,弥补长度的不足,不影响代码执行结果
当b链表循环结束,就开始循环a链表,弥补长度的不足,不影响代码执行结果
a链表:4->1->8>-4->5
b链表: 5->0->1->8->4->5

改变之后的链表结构
图片上面和我的写法,我是将增加的链表放在后面,应该是:41845+501845,下面应该是501845+41845
公共节点是845

长度一致之后,采用双指针方法
代码:

function FindFirstCommonNode(pHead1, pHead2)
{
    // write code here
    let p1 = pHead1
    let p2 = pHead2
    while(p1 != p2){
        p1 = p1 ? p1.next : pHead2
        p2 = p2 ? p2.next : pHead1
    }
    return p1
}
全部评论
如果有思路错误帮我指出一下吧,谢谢
点赞 回复 分享
发布于 2021-06-22 15:03

相关推荐

想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务