题目
输入两个链表,找出它们的第一个公共结点。
当不存在公共节点时,返回空节点。
样例
给出两个链表如下所示:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
输出第一个公共节点c1
方法一题解
1. 用两个指针 p1,p2 分别指向两个链表的头结点 headA,headB ,同时向后遍历。
2. 当其中一个指针到达该指针所指链表末尾(NULL)时,重新将这个指针定位到另一个链表的头结点。(两个指针交替进行一次同样的操作)
3. 当它们相遇时,所指向的结点就是第一个公共结点。
图示解释
设A链表的非公共部分长度为LA,B链表的非公共部分长度为LB,公共部分长度为C。
A链表总长度为LA + C,B链表总长度为LB + C。
当指针按照题解方式走下去,p1第二次走到公共节点的时候,走过的长度为LA + C + LB,p2第二次走到公共节点的时候,走过的长度为LB + C + LA。p1 和 p2走过的长度相等,p1、p2 必会相遇。
所以,当p1 和