力扣: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
相关推荐
程序喵大人21 分钟前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法
hanlin0328 分钟前
动态规划专练:力扣第121、122题
笔记·算法·leetcode
To_OC35 分钟前
LC 74 搜索二维矩阵:换皮的二分查找,我居然一开始没看出来
javascript·算法·leetcode
文心快码BaiduComate36 分钟前
文心快码荣获“中国优秀软件产品”,实力再获国家级认可
算法·代码规范
玖玥拾40 分钟前
LeetCode 189 轮转数组
算法·leetcode
ZhangShao06071 小时前
题解:CF2249B
c++·算法
小玮看世界1 小时前
[Python]线段树与二分法
数据结构·算法
Tisfy3 小时前
LeetCode 3345.最小可整除数位乘积 I:暴力枚举(从n开始尝试)
数学·算法·leetcode·题解·枚举
DolphinDB智臾科技4 小时前
告别 TB 级数据搬运:DolphinDB 滤波算法库,重塑物联网数据价值链
物联网·算法
可编程芯片开发4 小时前
基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真
算法