# LeetCode : 160. Intersection of Two Linked Lists

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:

• If the two linked lists have no intersection at all, return null.
• The linked lists must retain their original structure after the function returns.
• You may assume there are no cycles anywhere in the entire linked structure.
• Your code should preferably run in O(n) time and use only O(1) memory.

AC代码如下：

 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
{
ListNode * res = NULL;
int lengthA = 0;
int lengthB = 0;
ListNode *a,*b;
while(a != NULL)
{
lengthA++;
a = a->next;
}
while(b != NULL)
{
lengthB++;
b = b->next;
}
int diff = abs(lengthA - lengthB);
if(lengthA > lengthB)
{
for(int i = 0;i < diff;i++)
a = a->next;
}
if(lengthA < lengthB)
{
for(int i = 0;i < diff;i++)
b = b->next;
}
while(a!=NULL && b!= NULL)
{
if(a == b)
{
res = a;
break;
}
a = a->next;
b = b->next;
}
return res;

}

• 本文已收录于以下专栏：

举报原因： 您举报文章：LeetCode : 160. Intersection of Two Linked Lists 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)