Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
C++
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(!headA||!headB)
return nullptr;
int lenA = GetLen(headA);
int lenB = GetLen(headB);
if(lenA < lenB)
{
for(int i = 0;i < lenB-lenA;++i)
{
headB = headB->next;
}
}
else
{
for(int i = 0;i < lenA - lenB;++i)
{
headA = headA->next;
}
}
while(headA != headB)
{
headA = headA->next;
headB = headB->next;
}
return headA;
}
int GetLen(ListNode* head)
{
if(head == nullptr)
return 0;
int cnt = 1;
while(head != nullptr)
{
head = head->next;
cnt++;
}
return cnt;
}