编程之美-编程判断两个链表(可能含环)是否相交以及相交的第一个结点

本文详细解析了链表相交问题的两种扩展情况:判断两个链表(含环)是否相交以及求出两个链表相交的第一个结点。通过逻辑分析,提供了具体的解题思路和算法实现。

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

第三章 3.6 扩展题
扩展1 : 如何判断两个链表(含环)是否相交
扩展2 : 如何求出两个链表相交的第一个结点

假设两个链表分别为A,B链表

扩展1 :如何判断两个链表(含环)是否相交
解题思路:
(1)先判断AB链表是否含有环,如果不含有环则按照之前的文章 编程之美-判断两个链表是否相交 | Pan Hai nan’Blog 进行;
(2)如果AB链表中有一个链表含有环,而另一个不含环,则可以肯定AB链表不相交;
(3)如果AB链表都含有环,则可以肯定的是如果两个链表相交,那么AB的环肯定是共有的;根据这个特点可以进行这样的判断:找出A链表环中的任意一个结点,然后遍历B链表比较此结点是否在B链表中;如果在,则相交;反之不相交。

扩展2 : 如何求出两个链表相交的第一个结点(这里我们先讨论无环的链表,因为有环的链表不是很好判断相交的第一个结点位置)
解题思路:
(1)先遍历得出AB链表的表长,这是其实两个指针指向AB链表的尾部,我们可以先进行判断尾结点是否相等,相等则AB链表相交,否则不相交,就不用进行后续步骤了;
(2)假设A链表的长度大一些,然后先遍历A链表Length(A)-Length(B)步,此时A链表剩下的没有遍历的长度正好和B链表的表长度相等;
(3)同时遍历A链表剩下的结点和B链表所有结点,并进行比较,如果在遍历过程中找到了两个相等的结点,则此结点就是AB链表相交的第一个结点。

这里就讲到这吧,有环的两个链表判断相交的第一个结点位置目前还没有思绪,有思绪了再补上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值