当前位置:网站首页>2022.07.20_Daily Question
2022.07.20_Daily Question
2022-07-31 07:41:00 【No. い】
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;
}
// Assuming that the original list: 1 -> 2 -> 3
// 1.复制 next 指针: 原始值 -> A new copy of node
// => 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 The original pointer random 指向节点, The new pointer random As the original pointer random 节点的下一个
// if The original pointer random 指向 null, The new pointer random 指向 null
node = head;
while (node != null) {
node.next.random = node.random == null ? null : node.random.next;
node = node.next.next;
}
// 3.Separation of the original list and copy of the new list, 还原原链表
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;
}
}
边栏推荐
- 2022.7.29 数组
- [PSQL] SQL基础教程读书笔记(Chapter1-4)
- Zabbix6.2惊喜发布!特别优化中大型环境部署的性能!
- Yu Mr Series 】 【 2022 July 022 - Go Go teaching course of container in the dictionary
- 毫米波技术基础
- 【Go语言刷题篇】Go完结篇函数、结构体、接口、错误入门学习
- 知识、创新、回报。
- 2022.07.12_Daily Question
- 2022.07.18_每日一题
- 'vite' is not an internal or external command, nor is it a runnable program or batch file.
猜你喜欢
剑指offer(一)
毫米波技术基础
简单谈谈Feign
【微服务】(十六)—— 分布式事务Seata
基于LSTM的诗词生成
How to set the computer password?How to add "safety lock" to your computer
熟悉而陌生的新朋友——IAsyncDisposable
文件 - 04 下载文件: 根据文件下载链接下载文件
【解决】npm ERR A complete log of this run can be found in npm ERR
Leetcode952. Calculate maximum component size by common factor
随机推荐
03-SDRAM: Write operation (burst)
Leetcode952. Calculate maximum component size by common factor
事务的四大特性
Chapter 17: go back to find the entrance to the specified traverse, "ma bu" or horse stance just look greedy, no back to search traversal, "ma bu" or horse stance just look recursive search NXM board
tidyverse笔记——dplyr包
Analysis of the principle and implementation of waterfall flow layout
【Star项目】小帽飞机大战(八)
科普 | “大姨太”ETH 和 “小姨太”ETC的爱恨情仇
小实战项目之——吃货联盟订餐系统
postgresql源码学习(34)—— 事务日志⑩ - 全页写机制
Web浏览器工作流程解析
第9章 异常try...except...else...finally
文件 - 04 下载文件: 根据文件下载链接下载文件
讲解实例+详细介绍@Resource与@Autowired注解的区别(全网最全)
简单谈谈Feign
2022.07.13_Daily Question
金融租赁业务
Zabbix6.2 Surprise Release!Especially optimize the performance of medium and large environment deployment!
SQL Server Datetime2数据类型
‘vite‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。