算法小解:138. 随机链表的复制

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

构造这个链表的 深拷贝 。 深拷贝应该正好由 n全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点

解:哈希表,可以先按照next指针的顺序先构造一个新链表,在构造的过程中,将原来的节点和其对应复制的新节点利用哈希表一一对应,然后之后遍历每个原始节点的random节点就能够找到新节点。

java 复制代码
/*
// Definition for a Node.
class Node {
    int val;
    Node next;
    Node random;

    public Node(int val) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}
*/

class Solution {
    public Node copyRandomList(Node head) {
        Node pre = new Node(0);
        Node cur = head;
        Node new_node = pre;
        HashMap<Node, Node> map = new HashMap<>(); // 用于映射<原节点,新节点>
        while(cur != null){
            new_node.next = new Node(cur.val);
            new_node = new_node.next;
            map.put(cur, new_node); // 映射
            cur = cur.next;
        }
        cur = head;
        new_node = pre.next;
        while(cur != null){
            if(cur.random != null){
                new_node.random = map.get(cur.random);
            }
            cur = cur.next;
            new_node = new_node.next;
        }
        return pre.next;        
    }
}
相关推荐
Lumos1861 分钟前
《ESP32 物联网全栈实战-02》ESP-IDF 工程结构
算法
QN1幻化引擎11 分钟前
把 意识评测做成了一场"非侵入实验":不碰生产代码,分数反而更真了
人工智能·算法·架构
冻柠檬飞冰走茶39 分钟前
PTA基础编程题目集 7-17 爬动的蠕虫(C语言实现)
c语言·开发语言·数据结构·算法
会编程的土豆1 小时前
LeetCode 热题 HOT100(一):哈希表与双指针入门(Go 实现)
算法·leetcode·职场和发展
学习中.........1 小时前
并行 BPE 训练 与 手写 `Tokenizer`
人工智能·算法·机器学习·语言模型
科学实验家2 小时前
动态规划2
算法·动态规划
東隅已逝,桑榆非晚2 小时前
数据结构常见英文术语速查手册
数据结构
imuliuliang11 小时前
关于数据结构在算法设计中的核心作用解析7
算法
2401_8949155313 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity