#include"link.h"
typedef enum bool
{
False = 0,
True = 1
}bool;
//L1和L2为两个单链表时,函数返回True表示链表相交,返回False表示不想交
bool LinkIntersect(link *L1,link *L2)
{
link *p1=L1;
link *p2=L2;
while(p1) //遍历L1
{
while(p2)//遍历L2
{
if(p1==p2)
{
return True;
}
p2=p2->next;
}
p1=p1->next;
}
return False;
}
//若两个单链表相交,那么他最后一个节点一定相同
bool LinkIntersect2(link *L1,link *L2)
{
link * p1=L1;
link * p2=L2;
//找到L1链表中的最后一个节点
while(p1->next)
{
p1=p1->next;
}
//找到L2链表中的最后一个节点
while(p2->next)
{
p2=p2->next;
}
if(p1==p2){
return True;
}
else
{
return False;
}
}
bool LinkIntersect3(link *L1,link *L2)
{
link * plong=L1;
link * pshort=L2;
link *tmp=NULL;
int num1=0,num2=0,step=0;
//L1和L2的长度
while(plong)
{
num1++;
plong=plong->next;
}
while(pshort)
{
num2++;
pshort=pshort->next;
}
//重置plong和pshort,使plong代表较长的链表
plong=L1;
pshort=L2;
step=num1-num2;
if(num1<num2)
{
plong=L2;
pshort=L1;
step=num2-num1;
}
//在plong链表中找到和pshort等长度的子链表
tmp=plong;
while(step)
{
tmp=tmp->next;
step--;
}
//逐个比较tmp和pshort链表中的节点是否相同
while(tmp&&pshort)
{
if(tmp==pshort)
{
return True;
}
tmp=tmp->next;
pshort=pshort->next;
}
return False;
}
如何判断两个单链表相交的方法(代码实现)
最新推荐文章于 2022-09-25 19:55:26 发布