力扣:138.随机链表的复制

cpp 复制代码
class Solution {
public:
    Node* copyRandomList(Node* head) {
        if ( !head ) return nullptr;
        Node *cur = head;
        while ( cur ) {
            Node *copy = new Node( cur->val ); // 复制节点的值
            copy->next = cur->next, cur->next = copy, cur = copy->next; // 把复制的节点插在两个节点之间
        }
        cur = head;
        while ( cur ) {
            Node *copy = cur->next;
            copy->random = cur->random ? cur->random->next : nullptr; // 把复制的节点的 random 指针建立起来
            cur = copy->next;
        }
        cur = head;
        Node *newHead = head->next, *copyCur = newHead;
        while ( cur ) {
            cur->next = copyCur->next, cur = cur->next; // 拆分两个链表
            if ( cur ) copyCur->next = cur->next, copyCur = copyCur->next;
        }
        return newHead;
    }
};
  1. Node 有 3 个参数,val next 和 random
  2. 为了空间复杂度最优,在原来链表的节点之后插入一个节点,复制这个节点的 val next 和 random
相关推荐
WiChP1 小时前
【V0.1B16】从零开始的2D游戏引擎开发之路
开发语言·算法·游戏引擎
番茄巴士2 小时前
手写一个 mini HashMap,彻底搞懂哈希表原理
算法
圣保罗的大教堂2 小时前
leetcode 3742. 网格中得分最大的路径 中等
leetcode
宣宣猪的小花园.2 小时前
【机器学习】过拟合与泛化:模型为什么会“刷题很强、实战失灵”
人工智能·算法·机器学习
INGNIGHT2 小时前
624.数组列表中的最大距离(maximum)
算法·散列表
Niuguangshuo3 小时前
论文解读:w2v-BERT,把 wav2vec 2.0 和 BERT 合成一根管子的语音 SSL
算法·音视频·语音识别
科技小E3 小时前
国标视频分析平台EasyGBS×自动化AI算法训练服务器DLTM,把通用AI炼成你的现场AI
算法·自动化·音视频
zander2583 小时前
LeetCode 15. 三数之和
算法
AiNightVision3 小时前
NMC存算一体与AI ISP
人工智能·算法·车载系统·自动驾驶·无人机·视频·智能硬件
不穿鞋的懒羊羊3 小时前
高精度算法——加、减、乘、除
算法