链表的相交与环问题

两条无环链表相交

先说结论

  1. 两条无环链表相交,只能为Y形状,不可能为X形状。
  2. 两条无环链表相交,尾结点必定相同。
  3. 判断两条无环链表是否相交,看是不是同一个尾结点,是则相交。
  4. 两条无环链表相交,求相交的第一个结点,算法思想:长度相减。

解释

  1. 链表的每一个结点只有一个后继结点,如果是X这种形状,那么相交处的结点同时有两个后继结点,不符合链表的要求。但是Y这种形状,在相交处的结点只有一个后继结点,是符合要求的。另外对于前驱结点,是可以有多个的,链表只要求从头能走到尾,所有后继结点必须是唯一的,没有直接求前驱的链表(这里说的是普通的链表,双向链表是可以直接求前驱的),所以前驱有两个也不影响。
  2. 在明白上面说的第一点后,不难理解,两条无环链表相交,只能Y形状,所以说它们的尾结点必定相同。
  3. 第二点两条无环链表相交,尾结点必定相同,所以我们可以用这个知识点,反过来去判断两条无环链表是否相交,只需遍历链表,看两者尾结点是否相同,相同则是相交,反之,则不相交。
  4. 我们可以较为容易的遍历链表得到它的长度,我们遍历两条链表,用得到的长度len1-len2(len1为长的那条的链表长度),得到差值,让长的链表先遍历这个差值长度,然后两条链表一起开始遍历,只第一个相同的结点,就是相交的第一个结点。

有环情况

问题

  1. 判断链表是否有环,快慢指针。
  2. 求入环的第一个结点。
  3. 有环链表和无环链表不相交。

解释

  1. 判断一条链表是否有环,可以用到快慢指针,其实很好理解,我们假设一个指针a,一个指针b,ab同时从头开始遍历,a每次进1,b每次进2,如果没有环,b肯定比a先遍历完,也就是说它们不会出现相等的情况,只有出现有环的情况,才会出现ab某一个时刻相等。
  2. 求入环的第一个结点,我们从环处断开,那么是不是就变成了上面的两个无环链表相交,求第一个相交结点的问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值