力扣: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
相关推荐
陌上花开缓缓归以3 小时前
mebdlts3.4.1安全启动全流程
服务器·算法
Nebula_g3 小时前
JavaSE拓展:可变参数
java·开发语言·算法·安全·javase·可变参数
129Lab3 小时前
BMS 核心算法:SOC 估算从安时积分到 LSTM-UKF 串级融合的 30 年演进(附 Python 实现)
python·算法·lstm·python3.11·bms·soc估算
kgkg3 小时前
我通过逆向学到了douyin的美颜算法
算法
Xin7703 小时前
LeetCode 230. 二叉搜索树中第 K 小的元素(迭代中序遍历 + 栈)
leetcode
anew___4 小时前
《从零手写操作系统 (30):环境变量与进程上下文——export/unset与继承语义》
java·开发语言·网络·jvm·算法
垆边人似月.4 小时前
城市连通性(200分 / 并查集)
数据结构·算法·图论
Gust of wind4 小时前
串与KMP模式匹配:存储结构、基本操作、next数组手算
c语言·数据结构·后端·算法
Navigator_Z4 小时前
LeetCode //C - 1283. Find the Smallest Divisor Given a Threshold
c语言·算法·leetcode
啦啦啦啦啦zzzz5 小时前
一致性哈希
服务器·算法·哈希算法·c++20·分布式存储