首先求出两个链表的长度
然后就要找到长长链表,让长链表先走,最后两个链表一起走
最后有一个注意事项就是当两个链表一起走判断后面的交点的时候是根据地址判断,不是根据值判断,举例如下
完整的代码如下:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int len1=0;
int len2=0;
ListNode*cur1=headA;
ListNode*cur2=headB;
while(cur1)
{
len1++;//求第一个链表的长度
cur1=cur1->next;
}
while(cur2)
{
len2++;//求第二个链表的长度
cur2=cur2->next;
}
int road=abs(len1-len2);//求两个链表的长度差
ListNode*longlist;//表示长链表
ListNode*shortlist;//表示短链表
if(len1>len2)//根据两个链表的长度来找到长链表
{
longlist=headA;
shortlist=headB;
}
else
{
longlist=headB;
shortlist=headA;
}
while(road--)//上面已经找到了长链表,此处让长链表先走
{
longlist=longlist->next;
}
while(longlist&&shortlist&&(longlist!=shortlist))//两个链表一起走,当两个链表的节点相等或者有一个已经走完了则退出循环
{
longlist=longlist->next;
shortlist=shortlist->next;
}
return longlist; //最后返回交点或NULL
}