AcWing 66. 两个链表的第一个公共结点
原题链接
简单
作者:
Kiyomi
,
2024-09-08 21:43:26
,
所有人可见
,
阅读 3
双指针法
/*
1. 用两个指针 p1,p2 分别指向两个链表 headA,headB 的头结点,同时向后遍历。
2. 当指针到达链表末尾时,重新定位到另一个链表的头结点!!!
3. 当它们相遇(需要循环多个轮次才能对齐)时,所指向的结点就是第一个公共结点。
*/
class Solution {
public:
ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
if (!headA || !headB) return nullptr;
ListNode *ptrA = headA;
ListNode *ptrB = headB;
// 两个指针遍历,最终会在公共节点相遇,或者在末尾为nullptr相遇
while (ptrA != ptrB) {
// 如果到达链表A末尾,则跳转到链表B头部
ptrA = (ptrA == nullptr) ? headB : ptrA->next;
// 如果到达链表B末尾,则跳转到链表A头部
ptrB = (ptrB == nullptr) ? headA : ptrB->next;
}
return ptrA; // 如果有公共节点,返回公共节点;否则返回nullptr
}
};