当前位置:网站首页>2022.07.20_每日一题
2022.07.20_每日一题
2022-07-31 06:07:00 【诺.い】
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]]
提示:
0 <= n <= 1000
-104 <= Node.val <= 104
Node.random
为null
或指向链表中的节点。
- 哈希表
- 链表
coding
class Solution {
public Node copyRandomList(Node head) {
if (head == null) {
return null;
}
// 假设原链表: 1 -> 2 -> 3
// 1.复制 next 指针: 原始值 -> 新复制出来的节点
// => 1 -> 1 -> 2 -> 2 -> 3 -> 3
Node node = head;
while (node != null) {
Node temp = new Node(node.val);
temp.next = node.next;
node.next = temp;
node = node.next.next;
}
// 2.复制 random 指针
// if 原指针的 random 指向节点, 则新指针的 random 为原指针 random 节点的下一个
// if 原指针的 random 指向 null, 则新指针的 random 指向 null
node = head;
while (node != null) {
node.next.random = node.random == null ? null : node.random.next;
node = node.next.next;
}
// 3.分离原链表和复制出来的新链表, 还原原链表
node = head;
Node res = head.next;
Node temp = res;
while (node != null) {
node.next = node.next.next;
node = node.next;
temp.next = node == null ? null : node.next;
temp = temp.next;
}
return res;
}
}
边栏推荐
- MySQL的触发器
- iOS大厂面试查漏补缺
- Chapter 16: Constructing the Magic Square for Prime Numbers of Order n(5,7)
- opencv、pil和from torchvision.transforms的Resize, Compose, ToTensor, Normalize等差别
- 文件 - 05 下载文件:根据文件Id下载文件
- Redux状态管理
- 【Go语言入门】一文搞懂Go语言的最新依赖管理:go mod的使用
- Obtaining server and client information
- Run the NPM will pop up to ask "how are you going to open this file?"
- 试题 历届真题 错误票据【第四届】【省赛】【B组】
猜你喜欢
LeetCode brush # 376 # Medium - swing sequence
毫米波技术基础
【微服务】Nacos集群搭建以及加载文件配置
Zero-Shot Learning & Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
postgresql源码学习(34)—— 事务日志⑩ - 全页写机制
Koa框架的基本使用
【云原生】-Docker安装部署分布式数据库 OceanBase
iOS大厂面试查漏补缺
【 TA - frost Wolf _may - "one hundred plan" 】 art 2.3 hard surface
【云原生】-Docker容器迁移Oracle到MySQL
随机推荐
Jobject 使用
MySQL笔记下
强化学习科研知识必备(数据库、期刊、会议、牛人)
Zotero | Zotero translator plugin update | Solve the problem that Baidu academic literature cannot be obtained
【云原生】-Docker容器迁移Oracle到MySQL
数据库原理作业2 — JMU
DirectExchange交换机简单入门demo
Postgresql source code learning (34) - transaction log ⑩ - full page write mechanism
英语翻译软件-批量自动免费翻译软件支持三方接口翻译
What is float?What is document flow?Several ways and principles of clearing floats?What is BFC, how to trigger BFC, the role of BFC
单点登录 思维导图
tidyverse笔记——管道函数
【Go报错】go go.mod file not found in current directory or any parent directory 错误解决
Project exercise - memorandum (add, delete, modify, check)
【Go】Go 语言切片(Slice)
【第四章】详解Feign的实现原理
那些破釜沉舟入局Web3.0的互联网精英都怎么样了?
Bulk free text translation
【并发编程】ReentrantLock的lock()方法源码分析
科普 | “大姨太”ETH 和 “小姨太”ETC的爱恨情仇