leetcode hot100刷题日记——11.相交链表


解答:

cpp 复制代码
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        //方法一:先遍历一条链表,存节点;再遍历另一条链表,找对应的节点有没有存过
        // unordered_set<ListNode*>vis;
        // ListNode *temp=headA;
        // while(temp!=nullptr){
        //     vis.insert(temp);
        //     temp=temp->next;
        // }
        // temp=headB;
        // while(temp!=nullptr){
        //     if(vis.count(temp)!=0){
        //         return temp;
        //     }
        //     temp=temp->next;
        // }
        // return nullptr;

        //方法二:双指针
        if(headA==nullptr || headB==nullptr){
            return nullptr;
        }
        ListNode *pA=headA,*pB=headB;
        while(pA!=pB){
            pA=pA==nullptr?headB:pA->next;
            pB=pB==nullptr?headA:pB->next;
        }
        return pB;
    }
};

方法一:

时间复杂度O(M+N)

空间复杂度O(N)

方法二:

时间复杂度O(M+N)

空间复杂度O(1)

方法二思想详见官方题解link

直白理解:两个链表左端对齐,后面的分别用对方的给补上,如果两个一样长,那就不用找到后面补上的部分;如果不一样长,分别经过对方的补上之后相同的部分就能拉齐了

相关推荐
MSTcheng.3 小时前
【优选算法必修篇——位运算】『面试题 01.01. 判定字符是否唯一&面试题 17.19. 消失的两个数字』
java·算法·面试
weixin_421922693 小时前
模板元编程性能分析
开发语言·c++·算法
2401_851272993 小时前
C++中的类型擦除技术
开发语言·c++·算法
Liu628883 小时前
C++命名空间使用规范
开发语言·c++·算法
tankeven4 小时前
【无标题】
数据结构·c++·算法
bbbb3654 小时前
算法性能建模的数值方法与误差分析的技术7
算法
2501_945424804 小时前
模板代码模块化设计
开发语言·c++·算法
AMoon丶4 小时前
Golang--内存管理
开发语言·后端·算法·缓存·golang·os
zl_vslam4 小时前
SLAM中的非线性优-3D图优化之相对位姿Between Factor-四元数(十二)
人工智能·算法·计算机视觉
coding者在努力4 小时前
算法竞赛中根据数据规模猜测算法
c++·算法·stl·时间复杂度