八:求两个链表的第一个公共结点

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

 

一般的思路是找出两个链表 长度的差值,然后长的先跑完差值,最后和着短的链表一起跑,这样必然能够来到第一个公共结点

但是这里有个问题,就是不能够保证这个链表是无环的,如果有环的话,在判断链表长度差值的时候,因为一直不能得到null,所以会陷入死循环。

所以可以先判断是否有环,这个的判断可以通过两种方式,第一种是hashmap或者hashset 的方式,遍历两个链表

第二个就是快慢指针,快的一次两步,慢的一次一步,如果发现空,返回null,如果发现有快慢指针相等的情况(注:必然会相等的,这是结论),则返回这个节点。

在返回这个节点后,又有两种情况:第一种是公共节点在链表上,入环节点在环上;一种是公共节点和入环节点都在环上;公共节点和入环节点不可能都在同一个位置(好好想想就知道了,提示:二叉树的结构)

这个3可以直接让一个节点一直next,如果能够到下一个节点就ok

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务