/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if(headA == NULL || headB == NULL)
return NULL;
struct ListNode *temp1 = headA,*temp2 = headB;
int lena = 0,lenb = 0;
struct ListNode *p = headA;
while(p) //计算出 A 的长度
{
p = p->next;
lena++;
}
p = headB;
while(p) //计算出 B 的长度
{
p = p->next;
lenb++;
}
if(lenb>lena) //让较长的结点先走
{
int i = 0;
while(i<lenb-lena)
{
i++;
headB = headB->next;
}
}
else
{
int i = 0;
while(i<lena-lenb)
{
i++;
headA = headA->next;
}
}
while(headA != headB) //找相汇的结点
{
headA = headA->next;
headB = headB->next;
}
struct ListNode *result = headA;
headA = temp1;
headB = temp2;
return result;
}
//思路:先计算出表 A 和 表 B 的长度差值,这样就可以知道在相同的结点之前,两表相差多少结点,让较长的表先走过相差结点的长度,然后两表
//再同时开始遍历,当指向的结点相同时,就是相汇的结点