c++实现---两个链表的第一个公共节点

题目描述
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
方法:双指针法
代码

class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        if(!pHead1 || !pHead2){
            return nullptr;
        }
        ListNode *p1=pHead1;
        ListNode *p2=pHead2;
        while(p1!=p2){
            p1=p1?p1->next:pHead2;//p1为true时,指针后移,否则从链表2开始
            p2=p2?p2->next:pHead1;//p2为true时,指针后移,否则从链表1开始
        }
        return p1;
    }
};

时间复杂度:O(m+n), m,n分别为链表A,B的长度,最坏情况下,公共结点为最后一个,需要遍历m+n个结点
空间复杂度:O(1)

猜你喜欢

转载自blog.csdn.net/Fizz6018/article/details/107184971