当前位置: 首页 > news >正文

链表--随机链表复制

给你一个长度为 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 作为传入参数。

示例 1:

输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]

示例 2:

输入:head = [[1,1],[2,1]]
输出:[[1,1],[2,1]]

示例 3:

输入:head = [[3,null],[3,0],[3,null]]
输出:[[3,null],[3,0],[3,null]]
/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node* random;Node(int _val) {val = _val;next = NULL;random = NULL;}
};
*/class Solution {
public:unordered_map<Node*,Node*> cacheNode;Node* copyRandomList(Node* head) {if(head==nullptr){return nullptr;}if(!cacheNode.count(head)){Node* headNew=new Node(head->val);cacheNode[head]=headNew;headNew->next=copyRandomList(head->next);headNew->random=copyRandomList(head->random);}return cacheNode[head];}
};

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python爬虫——入门
  • leetcode509:斐波那契数
  • 递归实现组合型枚举
  • 机器学习概述,深度学习,人工智能,无监督学习,有监督学习,增量学习,预处理,回归问题,分类问题
  • Redis篇一:初识Redis
  • 1.XV6环境配置
  • 20240824给飞凌OK3588-C的核心板刷Ubuntu22.04并安装iperf3测试网速
  • 怎样更改电脑的MAC地址?
  • leetcode343:整数拆分
  • 传统网络编程有什么问题
  • 前端开发工程师面试整理-ES6+的新特性
  • 测试资料4444
  • 获取当前路由器的外网IP(WAN IP)
  • 精粹CSS伪类::enabled与:disabled的优雅应用
  • Python中网络请求中Retry策略实现方式例子解析
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【Amaple教程】5. 插件
  • Angular4 模板式表单用法以及验证
  • centos安装java运行环境jdk+tomcat
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Leetcode 27 Remove Element
  • overflow: hidden IE7无效
  • use Google search engine
  • vue:响应原理
  • vuex 笔记整理
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 想写好前端,先练好内功
  • 新书推荐|Windows黑客编程技术详解
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一道闭包题引发的思考
  • Java数据解析之JSON
  • Spring第一个helloWorld
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #DBA杂记1
  • #define 用法
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #stm32驱动外设模块总结w5500模块
  • #Ubuntu(修改root信息)
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (1)Nginx简介和安装教程
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (回溯) LeetCode 40. 组合总和II
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)glDrawArry绘制