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

两个链表的第一个公共结点_牛客网

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

输入两个链表,找出它们的第一个公共结点。

按照自己以往的思路肯定第一反应用HashSet和HashMap就能很快解决此问题,但是如果真的面试出了这道题目肯定不是面试官想要的思路。有一种简单的解调思路:那就是遍历两遍这两个链表,如果有重复的节点,那么一定能够使遍历的指针相等。

链接:https://www.nowcoder.com/questionTerminal/6ab1d9a29e88450685099d45c9e31e46
来源:牛客网

看下面的链表例子: 0-1-2-3-4-5-null a-b-4-5-null 代码的ifelse语句,对于某个指针p1来说,其实就是让它跑了连接好的的链表,长度就变成一样了。 如果有公共结点,那么指针一起走到末尾的部分,也就一定会重叠。看看下面指针的路径吧。 p1: 0-1-2-3-4-5-null(此时遇到ifelse)-a

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

小白刷剑指offer 文章被收录于专栏

跟着小白一起刷剑指offer,通过讨论加深印象吧~ 没有人不学习就能够掌握知识,知识就是需要学习的~

全部评论
幸好能帮助到大家
3 回复 分享
发布于 2020-04-11 11:23
链表中的节点和数组中的元素不一样,一个节点由val和next组成,这两个同时相同的时候,节点才相同
2 回复 分享
发布于 2020-05-11 14:18
其实相当于变成下面的两条链,同时遍历的时候必然找到交点部分。 0-1-2-3-4-5-a-b-4-5-null a-b-4-5-0-1-2-3-4-5-null
2 回复 分享
发布于 2020-05-06 18:04
如果没有公共点,不久死循环了?
2 回复 分享
发布于 2020-02-07 12:42
while循环里多加一个if(p1!=p2)判断怎么理解呢?我试了下可以降低时间,怎么解释呢
1 回复 分享
发布于 2020-03-12 19:31
牛皮!!!
1 回复 分享
发布于 2020-03-06 10:01
1-2-3-null和4-1-null好像不行。1-2-3-null-4-1-null,4-1-null-1-2-3-null没有公共节点,但实际上1是公共节点。
1 回复 分享
发布于 2020-02-07 16:46
真的很巧妙的做法,焕然一新非常感谢
1 回复 分享
发布于 2019-10-07 17:35
如果134和123,不就返回1了么,但是这两个链表没有公共节点呀?
点赞 回复 分享
发布于 2019-09-10 15:09
确实妙!
点赞 回复 分享
发布于 2021-09-29 21:37
哈?这不存在公共节点不就死循环了吗,加两个标记 class Solution: def FindFirstCommonNode(self , pHead1 , pHead2 ): p1, p2 = pHead1, pHead2 flag1, flag2 = 1, 1 while p1 and p2: if p1 == p2: return p1 p1 = p1.next p2 = p2.next if not p1 and flag1: p1 = pHead2 flag1 = 0 if not p2 and flag2: p2 = pHead1 flag2 = 0 return None
点赞 回复 分享
发布于 2021-06-23 15:08
茅塞顿开
点赞 回复 分享
发布于 2021-05-12 18:24
和小学数学里面找两个数的最小公倍数的思想很像,佩服大佬
点赞 回复 分享
发布于 2021-05-06 13:26
太妙了,膜拜大佬!!
点赞 回复 分享
发布于 2021-04-08 10:12
大神。。。太妙了。。。
点赞 回复 分享
发布于 2021-02-21 20:52
有点疑惑为什么if(p1 == null)p1 = pHead2; if(p2 == null)p2 = pHead1;这两句执行的前提是(p1!=p2)
点赞 回复 分享
发布于 2020-09-10 22:15
第9 行的 if(p1 != p2) 是起到什么作用的呢?
点赞 回复 分享
发布于 2020-09-09 17:42
如果 不存在 会不会一直循环拼接下去 while(p1!=p2){ p1 = p1.next; p2 = p2.next; if(p1 != p2){ if(p1 == null)p1 = pHead2; if(p2 == null)p2 = pHead1; } }
点赞 回复 分享
发布于 2020-09-03 20:59
链接:https://www.nowcoder.com/questionTerminal/6ab1d9a29e88450685099d45c9e31e46?answerType=1&f=discussion 来源:牛客网 p1: 0-1-2-3-4-5-null(此时遇到ifelse)-a-b-4-5-null p2: a-b-4-5-null(此时遇到ifelse)0-1-2-3-4-5-null 因此,两个指针所要遍历的链表就长度一样了! 小姐姐请问这段话怎么理解啊
点赞 回复 分享
发布于 2020-07-01 09:45
这个方法很好啊,很巧妙
点赞 回复 分享
发布于 2020-05-13 17:06

相关推荐

那么好了好了:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
评论
148
11
分享

创作者周榜

更多
牛客网
牛客企业服务