PROBLEM:
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.
SOLVE:
C++:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
{
ListNode *p1 = headA;
ListNode *p2 = headB;
if (p1 == NULL || p2 == NULL) return NULL;
while (p1 != p2) {
p1 = (p1 == NULL? headB : p1->next);
p2 = (p2 == NULL? headA : p2->next);
}
return p1;
}
Python:
class Solution:
def getIntersectionNode(self, headA, headB):
if headA is None or headB is None:
return None
pa = headA
pb = headB
while pa is not pb:
pa = headB if pa is None else pa.next
pb = headA if pb is None else pb.next
return pa
解释:每一个指针都把两个链表跑一遍,最后结果要么都是指向NULL要么相同。