思路:(1)先找出链表A和B中长的那一个。
(2)算出链表A和B的差距x。
(3)长的先走 x步。
(4)然后一起向后走。
(5)相等即为相交节点。
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *curA=headA;
struct ListNode *curB=headB;
int lengthA=0,lengthB=0;
while(curA)
{
lengthA++;
curA=curA->next;
}
while(curB)
{
lengthB++;
curB=curB->next;
}
int gap=abs(lengthA-lengthB);//差距步
struct ListNode * less=headA;
struct ListNode * great=headB;
if(lengthA>lengthB)
{
great=headA;
less=headB;
}
while(gap--)
{
great=great->next;//长的先走差距步
}
while(great)
{
if(great==less)
return great;
else{
great=great->next;
less=less->next;
}
}
return NULL;
}