输入两个链表,找出它们的第一个公共结点。
当不存在公共节点时,返回空节点。
样例
给出两个链表如下所示:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
输出第一个公共节点c1
算法:
让p和q分别指向A链表和B链表的头开始走,如果p为空那么就接着从B链表的头开始走,q为从就从A链表的头开始走,总长度都是a + c + b = b + c + a,最终会在公共点相遇,如果两个链表不相交,公共节点就是NULL
class Solution {
public:
ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
auto p = headA, q = headB;
while(p != q){
if(p)p = p->next;
else p = headB;
if(q) q = q->next;
else q = headA;
}
return p;
}
};