当前位置:网站首页>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;
}
}
边栏推荐
猜你喜欢
Conditional statements of shell (test, if, case)
文件 - 05 下载文件:根据文件Id下载文件
基于交替迭代法的交直流混合系统潮流计算matlab程序iEEE9节点系统算例
【面试:并发篇37:多线程:线程池】自定义线程池
2022.07.20_每日一题
Postgresql source code learning (33) - transaction log ⑨ - see the overall process of log writing from the insert record
Explain the example + detail the difference between @Resource and @Autowired annotations (the most complete in the entire network)
【微服务】(十六)—— 分布式事务Seata
How to set the computer password?How to add "safety lock" to your computer
Zabbix6.2 Surprise Release!Especially optimize the performance of medium and large environment deployment!
随机推荐
Obtaining server and client information
van-uploader uploads images, and cannot preview the image using base64 echo
第十七章:回溯探求指定入口的马步遍历,贪心无回溯探求马步遍历,递归探求nxm棋盘带障碍马步遍历
mysql的建表语句_三种常用的MySQL建表语句
2022.07.14_每日一题
Bulk free text translation
DAY18: XSS vulnerability
Conditional statements of shell (test, if, case)
关于求反三角函数的三角函数值
【Go语言入门】一文搞懂Go语言的最新依赖管理:go mod的使用
【C语言项目合集】这十个入门必备练手项目,让C语言对你来说不再难学!
R——避免使用 col=0
bcos简介及自序
Run the NPM will pop up to ask "how are you going to open this file?"
从 Google 离职,前Go 语言负责人跳槽小公司
【解决】npm ERR A complete log of this run can be found in npm ERR
Leetcode952. 按公因数计算最大组件大小
[PSQL] SQL基础教程读书笔记(Chapter1-4)
Zabbix6.2 Surprise Release!Especially optimize the performance of medium and large environment deployment!
【面试:并发篇38:多线程:线程池】ThreadPoolExecutor类的基本概念