求两个单链表的交点

本文详细探讨了如何判断两个单链表是否相交,包括无环、一个有环、两个有环的情况。通过分析单链表结构,提出计算长度差和双指针法来确定相交点。同时,给出了判断链表有环和求环入口点的算法,并分析了在有环链表相交时的特殊情况。

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

这个面试经常会碰到的题目,判断两个单链表是否相交。个人理解的也不是很深,零零散散的从网上找答案,并把所偶看到的整理了一下,希望对大家有帮助。

判断两个单链表是否相交共有三种情况:

1,两个单链表都没有环。

2,两个单链表中 一个有环,一个没有环。

3,两个链表都有环。

看第一种情况,连个单链表相交,只能是y型相交,不可能是x型相交,理由如下,有两个链表,La,Lb,他们的交点设为p吧,假设在La中,p的前驱为pre_a,后继为next_a,在Lb中,前驱为pre_b,后继为next_b,则pre_a->next=p,pre_b_next=p,接下来看后继,p->next=next_a,p->next=next_b;然后问题就出来了,大家应该知道,一个单链表的next指针只有一个,怎么跑出两个来呢,所以两个链表相交只能值Y型相交。继续解释,两个链表从交点后的其他节点都是一样的,这样只判断最后一个节点是否相交就可以知道两个单链表时候是相交了。判断完之后,还需要寻找链表的交点。求出两个链表的长度:len_a,len_b,求出差值len(len为较大的减去较小的值)。让长的那个先走len步,之后两个链表一起走,直至有点相同的时候。下面给出独立的算法:

typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
void is_intersect(LinkList La,LinkList Lb)
{
LNode *pa,*pb;
int len_a=0,len_b=0;
pa=La;
pb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值