面试算法章-链表:寻找两个链表的第一个交点

这篇博客探讨了如何高效地找到两个单链表的首个公共节点,通过比较两个链表的长度并同步移动指针,达到O(max(M, N))的时间复杂度,解决了面试中常见的算法问题。" 126788469,7989542,Python计算两个日期的天数差,"['Python', '开发语言']
摘要由CSDN通过智能技术生成

两个链表的第一个公共节点问题

现在有两个单链表,他们在某个节点处相交,请找出这个节点。

比如图中两个链表:

  • list1 = [a,b,c,d,e,f]

  • list2 = [h,i,e,f]

他们的第一个公共节点为e

图片

 

经过我们统计,这道题面试的出现概率为9.3%。

 

0分思路1

找两个链表中节点值一样的节点,哪个值在两个链表中都出现,就认为是第一个公共节点?

 

首先,我们要找的是这个节点,而不是这个节点的值;

另外,即使某个节点不是两个链表的公共节点,值依然可以相同。

 

0分思路2

对链表1中每个节点依次在链表2中查找是否有相同节点,哪个节点在链表2中出现,就认为是第一个公共节点?

 

这个方法可以找到第一个公共节点,但是效率太低了。

假设链表1长度为M,链表2长度为N,则时间复杂度Time complexity = O(M*N)

 

面试官想要的思路

先在链表1和链表2的头部分别设置一个指针pointer1, pointer2:

 

再分别计算链表1和链表2的长度M和N,图中链表1长度为6,链表2长度为4。

 

接着,如果M>N,则链表1的指针pointer1向前移动M-N步;否则,链表2的指针pointer2向前移动N-M步,于是图中pointer1移动两步:

图片

 

然后两个指针不断同时向前移动1步,直到pointer1=poin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值