Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3
begin to intersect at node c1.
找第一个相遇的节点,看哪个长,然后往前走几个节点,继续查看您能够相等
List* getIntersectionNode(List* first,List* second)
{
if(first == NULL)
return second;
if(second == NULL)
return first;
List* headA= first;
List* headB = second;
int lenA=0,lenB=0;
while(headA != NULL)
{
lenA++;
headA = headA->next;
}
while(headB != NULL)
{
lenB++;
headB = headB->next;
}
headA = first;
headB = second;
if(lenB > lenA)
{
while(lenA !=lenB)
{
headA = headA->next;
lenA++;
}
}
else if(lenA > lenB)
{
while(lenA != lenB)
{
headB = headB->next;
lenB++;
}
}
while(headA != NULL && headB !=NULL)
{
if(headA == headB)
return headA;
else
{
headA = headA->next;
headB = headB->next;
}
}
return NULL;
}