【链表】给出两个单向链表的头节点,判断两个链表是否相交,如果相交,请找出相交节点。

本文详细探讨了两个单链表可能存在的相交情况,包括无环、单环及双环链表间的相交判断方法。对于每种情况都提供了具体的解决策略,如使用快慢指针判断环的存在,并通过遍历寻找相交节点。

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

这个问题是分好几种情况的,要分支来判断:

假定两个单链表分别为链表A和链表B,则:

1.A无环,B无环,存在以下三种情况:

  (1). (2). (3).

2.A有环,B无环(A无环,B有环亦然),存在一种情况:

               

3.A有环,B有环,则存在三种情况:

  (1). (2). (3).

判断一个单向是否有环的方法:从该链表头指针开始,设置两个指针,一个快指针,一个慢指针。快指针每次沿着链表走两个链节,慢指针每次沿着链表走一个链节,当两个指针指向同一个链节时(即两个指针相等),说明链表有环;当快指针指向null时,说明链表无环。

对于情况1:

    分别遍历得到两个链表的长度,并且在遍历的时候,比较两个链表的终节点,如果不同,则是(2);如果相同,则为(1)或(3).

    对(1)(3),取链表节点数的差值,将长链表从差值处开始遍历,短节点从头结点开始遍历,比较两个节点是否相等,不相等继续向下遍历,直至相等找到相交节点。

对于情况2:

    直接得出结论,二者不相交。

对于情况3:

    判断A有环的因为快慢指针指向了同一个节点,记为交点A,B的记为交点B。从交点A放出一个慢指针,每次沿链表走一个链节;交点B放出一个快指针,每次沿着链表走

    两个链节。当两个指针相交,则说明A、B共用一个环,情形为(2)或(3);当A的慢指针走回交点A,两个指针仍然没相交,说明情况为(1).

    对(2)(3),将交点A的next指向null,断开环路然后按照1(3)中的线性查找方法去找相交节点,一定能找到一个交点C。

    我们将交点A的next复原,从交点C开始遍历,找到交点C的前节点,让交点C前节点的next指向null,这个时候能够找到交点D。当交点C与交点D相同时,为情况(2);不

    相等时为情况(3).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值