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

力扣热题100_链表_138_随机链表的复制

文章目录

  • 题目链接
  • 解题思路
  • 解题代码


题目链接

138. 随机链表的复制
给你一个长度为 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]]

解题思路

解法迭代
1.遍历链表,利用哈希表,以旧节点:新节点为映射关系,将节点关系存储下来
2.再次遍历链表,将新链表的 next 和 random 指针设置好

解题代码

class Solution:def copyRandomList(self, head: 'Node') -> 'Node':if not head:return Nonenode_dict = dict()curr = headwhile curr:new_node = Node(curr.val, None, None)node_dict[curr] = new_nodecurr = curr.nextcurr = headwhile curr:if curr.next:node_dict[curr].next = node_dict[curr.next]if curr.random:node_dict[curr].random = node_dict[curr.random]curr = curr.nextreturn node_dict[head]

相关文章:

  • Acwing2024蓝桥杯区间合并
  • 34-3 SSRF漏洞 - ssrf业务场景及挖掘
  • Ubuntu下TexStudio如何兼容中文
  • 简析数据安全保护策略中的十个核心要素
  • 【精品整理】最新数据安全评估标准合集
  • 基于单片机钢琴电子节拍器系统设计
  • PTA字符串约束
  • nginx + keepalived 搭建教程
  • LeetCode 60. 第k个排列
  • 云原生技术精选:探索腾讯云容器与函数计算的最佳实践
  • 使用Python实现逻辑回归模型
  • AI结合机器人的入门级仿真环境有哪些?
  • Linux USB host driver 枚举前的源码分析
  • 算法基础之组合数 I
  • 【Apache Doris】周FAQ集锦:第 2 期
  • php的引用
  • 【Leetcode】101. 对称二叉树
  • 收藏网友的 源程序下载网
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Django 博客开发教程 8 - 博客文章详情页
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript类型识别
  • JS函数式编程 数组部分风格 ES6版
  • MaxCompute访问TableStore(OTS) 数据
  • SegmentFault 2015 Top Rank
  • springboot_database项目介绍
  • Sublime Text 2/3 绑定Eclipse快捷键
  • vue自定义指令实现v-tap插件
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 基于webpack 的 vue 多页架构
  • 力扣(LeetCode)22
  • 前端技术周刊 2019-02-11 Serverless
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 微服务框架lagom
  • 我有几个粽子,和一个故事
  • 怎么将电脑中的声音录制成WAV格式
  • 昨天1024程序员节,我故意写了个死循环~
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • # 透过事物看本质的能力怎么培养?
  • #{}和${}的区别?
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (1)STL算法之遍历容器
  • (2)Java 简介
  • (6)STL算法之转换
  • (arch)linux 转换文件编码格式
  • (C语言)逆序输出字符串
  • (ZT)薛涌:谈贫说富
  • (第61天)多租户架构(CDB/PDB)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (译) 函数式 JS #1:简介
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default