在寻找链表相交的时候,我们可以先画草图进行可视化。
上面就是一个简单的链表,假设我们相交的链表里面存的是8,最后返回的也是8;
ListNode* curA=headA;
ListNOde* curB=headB;
int La=0;
while(curA)
{
++La;
curA=curA->netx;
}
int Lb=0;
while(curB)
{
++Lb;
curB=curB->netx;
}
首先我们先遍历两个链表,判断哪个链表较长,较长的链表走k下;
ListNode* longlist=headA;
ListNode* shortlist=headB;
if(Lb>La)
{
longlist=headB;
shortlist=headA;
}
int gap=abs(La=Lb);
第二步我们判断出来了哪个链表比较长,如果不是就执行另外一个,最后计算相差多少;
这里有一个库函数abs(求两个数相减的绝对值);
while(gap--)
{
longlist=longlisst->next;
}
长的量表先走abs
while(longlist)
{
if(longlist=shortlist)
{
return longlist;
}
else
{
longlist=longlist->next;
shortlist=shortlist->next;
}
}
return NULL;
最后开始判断,这两个量表在什么地方相等(这里判断的是地址,而不是值);如果遍历完了之后还是没有相等的,那证明这两个链表没有相交。