0
点赞
收藏
分享

微信扫一扫

66. 两个链表的第一个公共结点

dsysama 2022-01-06 阅读 36

66. 两个链表的第一个公共结点

输入两个链表,找出它们的第一个公共结点。

当不存在公共节点时,返回空节点。

数据范围

链表长度 [1,2000]。

样例

给出两个链表如下所示:
A:        a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3

输出第一个公共节点c1
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 * 两个链表要么是Y字型(有具体交点),要么是不相交的(空节点)
 * 利用a + b + c = b + c + a总路程思想找交点
 * 就是引入两个指针,同时走完两个链表,要么相遇在具体交点,要么在空节点
 */
 
class Solution {
public:
    ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
        auto p = headA, q = headB;
        while (p != q){//走完总路程,要么都在具体交点,要么都是空节点
            if (p != NULL) p = p->next;//判断是否该走另一条链表了
            else p = headB;
            if (q != NULL) q = q->next;
            else q = headA;
        }
        return p;
    }
};
举报

相关推荐

0 条评论