找出链表的第一个公共结点 java_剑指offer(36)-两个链表的公共节点问题(基础)...

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

链表形状:

0f24fd73b7178b4c2bbe9444764c3f47.png

思路:这道题是链表的基础题,和链表的反转一样,应该熟练。

下面总结下这道题的4种解法:

观察上图可知,要找到公共节点6,正向遍历链表会存在链表不一样长问题,最暴力方法就是两个For循环,复杂度o(mn),显然不是面试官想看到的,也不是最优的。所以有了其他3种时间复杂度为o(m+n)的方法。

方法一:

将链表节点放入两个堆中,然后从顶部粗话元素,第一个相等的元素就是公共节点。

方法二:

先计算两个链表的长度分别为m,n(m>n),让长的链表指针先走(m-n)个节点,然后两个指针同时运动,第一个相等的节点就是公共节点。

方法三:

直接反转两个链表,然后两个指针同时开始运动,第一个不相等的节点就是正向的公共节点,记住位置(k),然后正向访问倒数第k个节点就是公共节点。

demo:基于第二种方法编写,在线可以调通。

#include 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值