题目链接
解析:


完整代码:
cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
typedef struct ListNode ListNode;
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
//1.两个链表的长度
ListNode* pa = headA;
ListNode* pb = headB;
int sizeA = 0, sizeB =0;
while(pa)
{
++sizeA;
pa = pa ->next;
}
while(pb)
{
++sizeB;
pb = pb ->next;
}
int gap = abs(sizeA - sizeB);
ListNode* longlist = headA;
ListNode* shortlist = headB;
if(sizeA < sizeB)
{
longlist = headB;
shortlist = headA;
}
while(gap--)
{
//让长链表先走
longlist = longlist->next;
}
while(longlist)
{
if(longlist == shortlist)
return longlist; //shortlist
longlist = longlist ->next;
shortlist = shortlist ->next;
}
//跳出循环,两个链表不相等
return NULL;
}
};