力扣: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
相关推荐
不忘不弃2 小时前
皇后摆放问题优化求解法
算法
王老师青少年编程2 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:线段覆盖
c++·算法·贪心·csp·信奥赛·区间贪心·线段覆盖
痴男本疒2 小时前
从一道算法题发现的泛型问题
算法
itzixiao2 小时前
L1-054 福到了(15 分)[java][python]
java·python·算法
M--Y2 小时前
Redis集群和典型应用场景
redis·算法·哈希算法·集群
MediaTea2 小时前
AI 术语通俗词典:召回率(分类)
人工智能·算法·机器学习·分类·数据挖掘
ECT-OS-JiuHuaShan2 小时前
哲学的本质,是递归因果
java·开发语言·人工智能·科技·算法·机器学习·数学建模
_深海凉_2 小时前
LeetCode热题100-26. 删除有序数组中的重复项
python·算法·leetcode
w_com.h3 小时前
C语言中 栈、队列、双向链表
c语言·开发语言·链表