https://leetcode.com/problems/intersection-of-two-linked-lists/
由于链表的最后是合在一起的 所以在遍历的时候到末尾的长度一定相等的
假设两条链表的长度是m n m>n
方法是从短链表的头部
和 从长链表 距离链表尾部和短链表一样长的地方开始遍历 如果指向相同的地址就把这个地址返回
x指向长链表的首部
y指向短链表的首部
x y 同时向后面遍历 直到y为空 此时x距离末尾 m-n的长度
y赋值为长链表的首部
和x一起向后面遍历 直到x为空的时候 y距离长链表的首部m-n长度
距离尾部还有n的长度
然后将x赋值为短链表的首部
x和y同时向后面遍历 当指向同一个内存空间的时候将这个地址返回
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *x, *y;
x = headA;
y = headB;
while (x&&y)
{
x = x->next;
y = y->next;
}
if (!x)
{
x = headB;
while (y)
{
y = y->next;
x = x->next;
}
y = headA;
while (x != y)
{
x = x->next;
y = y->next;
}
return x;
}
else
{
y = headA;
while (x)
{
x = x->next;
y = y->next;
}
x = headB;
while (x != y)
{
x = x->next;
y = y->next;
}
return x;
}
}
};