【每日N题】如何判断两个单链表相交?第一个交点在哪里?

本文探讨了单链表相交问题及其解决方法,包括如何判断单链表是否存在环、确定环的长度、找到环的第一个节点,以及如何找到两个相交链表的第一个公共节点等关键内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题1】如何判断两个单链表相交

由于是单链表,必然是Y型,而不可能是X型,因此最后一个节点肯定是共同节点

【问题2】第一个交点在哪?

         实际上这是一个老题目变换来的。

【问题2.1】.如何判断单链表里面是否有环?

         算法的思想是设定两个指针p,q,其中p每次向前移动一步,q每次向前移动两步。那么如果单链表存在环,则p和q相遇;否则q将首先遇到null。这里主要理解一个问题,就是为什么当单链表存在环时,p和q一定会相遇呢?会不会跳过。

         实际上这是不会被跳过的,并且p最多也才是绕环一周。

【1】      肯定会追上;并且是p绕环一周内,因为如果p绕一周,q已经两圈了;

【2】      追上的时候肯定会碰到,原因是p在追q的最后阶段只有两种可能,两者相隔1个或2个节点。【a】当相隔1个节点时,q的下一个落脚点是p的前面一个位置,此时q的下一步正好踩上;【b】当相隔两个节点是,q直接踩上;

【问题2.2】如何判断单链表的环的长度?

           这个比较简单,知道q 已经进入到环里【比如问题2.1中追上的那个节点,就肯定在环上】,保存该位置。然后由该位置遍历,当再次碰到该q 位置即可,所迭代的次数就是环的长度。

【问题2.3】如何找到链表中第一个在环里的节点?

         假设链表环上第一个节点是距离头的第n个节点,那么当p到达此处时,q在第2n的位置,并且距离p为n,我们由问题2.2可得到环的长度L,那么环的入口就是q继续走L-n步的位置

【问题2.4】两个单链表相交,第一个交点在哪里?

    这个问题实际是问题2.3的变形,因为将链表的尾部链接到其中一个链表的头,就构成了上面的结构


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值