当前位置: 首页 > article >正文

leetcode hot100-32 随机链表的复制

方法一: 拼接 + 拆分 空间复杂度O(1)

class Solution {
public:
    Node* copyRandomList(Node* head) {
        if (head == nullptr)
            return nullptr;
        // 1.复制每个节点,把新节点直接插入到原节点后面
        Node* cur = head;
        while (cur != nullptr) {
            Node* node = new Node(cur->val);
            node->next = cur->next;
            cur->next = node;
            cur = node->next;
        }
        // 2.复制 random 指针,每个要复制的 random 是 cur->random 的下一个节点
        cur = head;
        while (cur != nullptr) {
            if (cur->random != nullptr)
                cur->next->random = cur->random->next;
            cur = cur->next->next;
        }
        // 3.拆分链表
        Node* newhead = head->next;
        Node* p = newhead;
        cur = head;
        while (cur != nullptr) { //若cur存在,则p一定存在
            cur->next = cur->next->next; // 还原原链表
            if (p->next != nullptr)//若p->next存在,则cur->next一定存在
                p->next = p->next->next; // 还原新链表
            cur = cur->next;
            p = p->next;
        }
        return newhead;
    }
};

方法二:哈希表 空间复杂度O(N)

class Solution {
public:
    Node* copyRandomList(Node* head) {
        if (head ==nullptr) return nullptr;
        Node* cur = head;
        unordered_map<Node*,Node*> map;
        while(cur != nullptr) {
            map[cur] = new Node(cur->val);
            cur = cur->next; 
        } 
        cur = head;
        while(cur!=nullptr) {
            map[cur]->next = map[cur->next];
            map[cur]->random = map[cur->random];
            cur = cur->next;
        }
        return map[head];
    }
};


http://www.kler.cn/a/557113.html

相关文章:

  • react+typescript,初始化与项目配置
  • 制造行业CRM选哪家?中大型企业CRM选型方案
  • USC安防平台之地图临近资源列表
  • 构建智能AI数字人:一站式源码开发指南
  • CAN 分析框架 CANToolz
  • html中iframe标签 隐藏滚动条
  • 微信小程序模仿快播标签云滚动特效
  • ​​​​​​​​​​​​​​如何使用函数指针来调用函数
  • AI基础:数据可视化简易入门(Matplotlib和Seaborn)
  • DeepSeek-R1之二_基于Open-WebUI的AI托管平台之Pyenv-win安装与配置搭建本地AI知识库
  • 如何自适应计算二值化的阈值
  • 无人机仿真、感知、规划
  • Java值传递,会影响原值的原因
  • Windows使用docker部署fastgpt出现的一些问题
  • Deepseek reasoning-content 透出调研
  • 进程间通信中间件---ZeroMQ
  • HarmonyOS 开发套件 介绍——下篇
  • std::lock_guard、std::unique_lock、std::shared_lock
  • 青少年软件编程(C语言)等级三级考试试题(2)
  • DeepSeek 到底是什么类型的应用,其核心功能是什么?