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

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

相关推荐
cynicme2 小时前
力扣3228——将 1 移动到末尾的最大操作次数
算法·leetcode
熬了夜的程序员2 小时前
【LeetCode】109. 有序链表转换二叉搜索树
数据结构·算法·leetcode·链表·职场和发展·深度优先
随意起个昵称3 小时前
【递归】二进制字符串中的第K位
c++·算法
mjhcsp3 小时前
C++ 循环结构:控制程序重复执行的核心机制
开发语言·c++·算法
立志成为大牛的小牛3 小时前
数据结构——四十一、分块查找(索引顺序查找)(王道408)
数据结构·学习·程序人生·考研·算法
xier_ran4 小时前
深度学习:RMSprop 优化算法详解
人工智能·深度学习·算法
地平线开发者4 小时前
不同传感器前中后融合方案简介
算法·自动驾驶
地平线开发者4 小时前
征程 6X 常见 kernel panic 问题
算法·自动驾驶
com_4sapi5 小时前
2025 权威认证头部矩阵系统全景对比发布 双榜单交叉验证
大数据·c语言·人工智能·算法·矩阵·机器人
前端小L5 小时前
二分查找专题(九):“降维”的魔术!将二维矩阵“拉平”为一维
数据结构·算法