【剑指Offer-52】两个链表的第一个公共节点
问题
输入两个链表,找出它们的第一个公共节点。
示例
解答
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *curA = headA, *curB = headB;
while (curA != curB) {
curA = curA ? curA->next : headB;
curB = curB ? curB->next : headA;
}
return curA;
}
};
重点思路
由图可知,两个指针从两个链表头同时开始遍历,到末尾的NULL
后转向另一个链表头,由于a + (b - c) = b + (a - c)
,所以在第二次遍历过程中一定会相遇,此时存在两种情况:
- 有公共节点时,在公共节点相遇;
- 无公共节点时,在两链表末尾的
NULL
相遇。