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
.Credits:
Special thanks to
@stellari for adding this problem and creating all test cases.
考虑如果两个链表有交叉点,则到最后一定都是重合的节点,不会分开。
我们可以首先计算出每个链表的长度lenA,lenB。 diff为长链表比短链表长出的节点数。
让长链表先走diff步,然后两个链表同步向后走,检验节点是否想等,地一个想等的节点即为开始重合的位置。
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { //C++ int lenA =0,lenB = 0; ListNode *tmpA = headA; while(tmpA != NULL) { lenA++; tmpA = tmpA->next; } ListNode *tmpB = headB; while(tmpB != NULL) { lenB++; tmpB = tmpB->next; } tmpA = headA, tmpB =headB; int diff; if(lenA > lenB) { diff = lenA - lenB; while(diff > 0) { tmpA = tmpA->next; diff--; } } else { diff = lenB - lenA; while(diff > 0) { tmpB = tmpB->next; diff--; } } while(tmpA != tmpB) { tmpA = tmpA->next; tmpB = tmpB->next; } return tmpA; }
[leetcode]Intersection of Two Linked Lists
原文地址:http://blog.csdn.net/chenlei0630/article/details/41653315