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.
Two pointers for Linked List.
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(!headA || !headB) return NULL;
int lengthA = 0;
int lengthB = 0;
ListNode* l1 = headA;
ListNode* l2 = headB;
while(l1) {
lengthA++;
l1 = l1->next;
}
while(l2) {
lengthB++;
l2 = l2->next;
}
int diff = abs(lengthA - lengthB);
ListNode* longer = lengthA > lengthB ? headA : headB;
ListNode* shorter = lengthA > lengthB ? headB : headA;
while(diff > 0) {
longer = longer->next;
diff--;
}
while(longer && shorter) {
if(longer == shorter) return longer;
longer = longer->next;
shorter = shorter->next;
}
return NULL;
}