题目描述
思路
两个链表在不相同的情况下计算出相差的节点个数,将长链表的指针走完差异的节点。之后两个指针一起走,当两个指针相同时则找到相交节点
解题方法
先计算两个链表的长度,写出长短链表,再计算二者的差异步,长链表的指针走完差异步,之后长短两个链表的指针一起走,两个指针相同时找到相交节点
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *curA=headA;
struct ListNode *curB=headB;
int la=0;//记录A链表长度
while(curA)
{
la++;
curA=curA->next;
}
int lb=0;//记录B链表长度
while(curB)
{
lb++;
curB=curB->next;
}
struct ListNode * longList=headA;
struct ListNode * shortList=headB;
if(lb>la)//如果A小于B则交换
{
longList=headB;
shortList=headA;
}
int p=abs(la-lb);//计算差异步
while(p--)//长链表走完差异步
{
longList=longList->next;
}
while(longList)//长短链表一起走,相同时为相交节点
{
if(longList==shortList)
{
return longList;
}
longList=longList->next;
shortList=shortList->next;
}
return NULL;
}