力扣138随机链表复制

embedded/2025/2/25 14:20:00/

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

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

例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。

返回复制链表的头节点。

用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:

  • val:一个表示 Node.val 的整数。
  • random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为  null 。

你的代码  接受原链表的头节点 head 作为传入参数。

题目理解(人话版)

你有一个长度为 n链表,每个节点除了有 valnext 指针外,还有一个 random 指针,指向链表中的任意一个节点,或者 null

目标
你需要创建一个全新的链表,这个新链表和原链表长得一模一样,也就是说:

  1. 节点值相同:新链表的每个节点的 val 要和原链表对应节点一样。
  2. next 关系相同:新链表next 指向要和原链表保持一致。
  3. random 关系相同:如果原链表中的某个 random 指向某个节点,新链表中对应的 random 也要指向链表中的对应节点,不能指回原链表
class Solution {public Node copyRandomList(Node head) {//新建hash表HashMap<Node, Node> nodeNodeHashMap = new HashMap<>();//保存新旧节点的投影关系Node cur = head;while (cur != null) {Node node = new Node(cur.val);nodeNodeHashMap.put(cur, node);cur = cur.next;}cur = head;while (cur != null) {//取出新节点Node newNode = nodeNodeHashMap.get(cur);//新节点指向next和randomnewNode.next  = nodeNodeHashMap.get(cur.next);newNode.random  = nodeNodeHashMap.get(cur.random);cur = cur.next;}return nodeNodeHashMap.get(head);}
}


http://www.ppmy.cn/embedded/165073.html

相关文章

【MySQL】第八弹---全面解析数据库表的增删改查操作:从创建到检索、排序与分页

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1 表的增删改查 1.1 Create 1.1.1 单行数据 全列插入 1.1.2 多行数据 指定列插入 1.1.3 插入否则更新 1.1.4 替…

AMBA-CHI协议详解(十九)

文章目录 4.6 Silent cache state transitions4.7 Cache state transitions at a Requester4.7.1 Read request transactions4.7.2 Dataless request transactions4.7.3 Write request transactions4.7.4 Atomic transactions4.7.5 Other request transactions4.6 Silent cache…

数据结构——哈希表

一、哈希表 1.1 哈希表的概念 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根据关键码值(Key value)而直接进行访问的数据结构。也就是说&#xff0c;它通过把关键码值映射到表中一个位置来访问记录&#xff0c;以加快查找的速度。这个映射函…

基于eBPF的零信任API网关:重塑云原生时代的安全通信范式

引言&#xff1a;穿透传统边界防护的次世代安全 当某政务云平台利用eBPF截获并阻止了伪装成合法gRPC流量的APT攻击时&#xff0c;其背后是纳米级协议深度检测与实时身份拓扑分析的双重保障。监控数据显示&#xff0c;该网关在50万QPS压力下实现全流量TLS 1.3解密仅消耗3.2% CP…

LeetCode刷题零碎知识点整理

系列博客目录 文章目录 系列博客目录 数组变量有length属性&#xff0c;String类的对象有length()方法。String s; s.split("\\s");不能去除头部空格&#xff0c;需要使用s s.trim();String类的对象有toCharArray()方法&#xff0c;List<>类型有toArray()方法…

第一届网谷杯

统计四场的所有题目&#xff08;共计12题&#xff0c;四场比赛一共上了21题【包括换题】&#xff09; 随便记记&#xff0c;以免老题复用&#xff08;已经复用了&#xff09; Web 文件包含 1 伪协议 http://120.202.175.143:8011/?cphp://filter/convert.base64-encode/reso…

RPC 框架项目剖析

RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节&#xff0c;此项目基于cpp语言 大概三千行左右&#xff0c;用于学习目的。 项目链接&#xff1a;rpc项目 项目底层类 1.抽象消息类 描述&#xff1a; 各种消息的基类 属性&#xff1a; 消息id&#xff0c;消息类型…

【DeepSeek】本地部署,保姆级教程

deepseek网站链接传送门&#xff1a;DeepSeek 在这里主要介绍DeepSeek的两种部署方法&#xff0c;一种是调用API&#xff0c;一种是本地部署。 一、API调用 1.进入网址Cherry Studio - 全能的AI助手选择立即下载 2.安装时位置建议放在其他盘&#xff0c;不要放c盘 3.进入软件后…