Description:
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.
Notes:
null
.Code:
1 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { 2 //算法1:假设链表无环,对齐A,B链表 3 ListNode * pa = headA; 4 ListNode * pb = headB; 5 int lengthA = 0, lengthB = 0; 6 while ( pa ) 7 { 8 pa = pa->next; 9 lengthA++; 10 } 11 while ( pb ) 12 { 13 pb = pb->next; 14 lengthB++; 15 } 16 17 ListNode * pLong = NULL; 18 ListNode * pShort = NULL; 19 pLong = (lengthA >= lengthB)?headA:headB; 20 pShort = (lengthA < lengthB)?headA:headB; 21 //对齐两个链表 22 for ( int i = 0; i < abs(lengthA-lengthB); i++ ) 23 { 24 pLong = pLong->next; 25 } 26 27 while (pShort) 28 { 29 if (pShort == pLong) 30 { 31 return pShort; 32 } 33 else 34 { 35 pShort = pShort->next; 36 pLong = pLong->next; 37 } 38 } 39 return NULL; 40 }
Intersection of Two Linked Lists
原文:http://www.cnblogs.com/happygirl-zjj/p/4592923.html