AcWing 66. 两个链表的第一个公共结点
原题链接
简单
仅供自己学习参考
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
ListNode *p1 = headA; //A链表长度LA
ListNode *p2 = headB; //B链表长度LB
while (p1 != p2){
if (p1 != NULL) p1 = p1->next; //p1指向空节点,也就是遍历完整个节点
else p1 = headB; //p1遍历完整个A链表,指向B链表头节点再次遍历
if (p2 != NULL) p2 = p2->next;
else p2 = headA;
} //p1和p2都遍历了LA + LB + LC(公共部分)的长度
return p1; //当它们会同时遍历完,且第一次相遇时就是第一个公共节点
}
};