【剑指offer】两个链表的第一个公共结点

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

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

双指针法。创建两个指针p1和p2,分别指向两个链表的头结点,然后依次往后遍历。如果某个指针到达末尾,则将该指针指向另一个链表的头结点;如果两个指针所指的节点相同,则循环结束,返回当前指针指向的节点。比如两个链表分别为:1->3->4->5->6和2->7->8->9->5->6。短链表的指针p1会先到达尾部,然后重新指向长链表头部,当长链表的指针p2到达尾部时,重新指向短链表头部,此时p1在长链表中已经多走了k步(k为两个链表的长度差值),p1和p2位于同一起跑线,往后遍历找到相同节点即可。其实该方法主要就是用链表循环的方式替代了长链表指针先走k步这一步骤。

public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
    if (pHead1 == null || pHead2 == null) return null;
    ListNode p1 = pHead1;
    ListNode p2 = pHead2;
    while (p1 != p2) {
        p1 = p1 == null ? pHead2 : p1.next;
        p2 = p2 == null ? pHead1 : p2.next;
    }
    return p1;
}
全部评论
看到你这终于看懂这种做法了,其他总是有些什么ifelse乱七八糟的描述
4 回复 分享
发布于 2020-01-07 16:37
假如没有交点的话那不就是无限死循环的
1 回复 分享
发布于 2020-05-31 20:14
我想问题目的意思难道是公共结点都是放在两个链表的最后吗?还是说公共结点放在两个链表的任意位置?
点赞 回复 分享
发布于 2021-07-30 22:21
这个写的很清楚~比上面的清晰很多,感谢
点赞 回复 分享
发布于 2021-04-23 11:29
如果两个链表等长,而且相同的节点并不在同一下标的话,是会出现死循环的。
点赞 回复 分享
发布于 2021-03-24 01:34
简洁!舒服!
点赞 回复 分享
发布于 2020-09-15 20:52
太妙了,我想的是最简单的方法找到等长的位置的,还是没有仔细思考其中的规律,女少口阿
点赞 回复 分享
发布于 2020-07-07 13:52

相关推荐

雪飒:我也遇见过,我反问他有考虑来华为od吗?
点赞 评论 收藏
分享
浪漫主义的虹夏:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
评论
55
14
分享

创作者周榜

更多
牛客网
牛客企业服务