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