详解:寻找两个链表的交点

 力扣链接

       

        如何判断两个链表是否相交,并找出交点,这个问题看似很难,只要掌握了方法,还是很容易解决的。

        我们先看一种特殊情况。如果两个链表有交点,且在交点前的节点个数是相等的,如果我们同时等速遍历这两个链表,两个链表一定是同时遍历到交点位置的。我们只需在遍历过程中可以一直比较两个链表的节点是否为同一个节点即可。

        当其中的一个链表为另一个链表的一部分呢?此时我们发现,它们的交点位置可以这样求:我们分别求出两个链表的长度,然后记录下它们长度的差值len,我们再从头遍历那个较长的链表,到了第len个节点时,正好就是这两个链表的交点。

        延伸这种情况我们可以发现,只要两个链表有交点,那么这个交点、一定是在较长链表第len个节点以及靠后的节点处的,因为它们相交后那部分的长度是相等的。对于两个不确定的链表,我们也可以先找到它们的长度差len,然后找到较长链表的第len个节点,现在问题就变成了刚开始说的那种情况了。

解题步骤可以细分为一下过程:

  1. 求两个链表的长度和长度差len。
  2. 找到较长链表第len个节点。
  3. 同时等速遍历两个链表,判断是否为同一个节点。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值