当前位置:网站首页>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 <= 104Node.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.07.14_Daily Question
- How to choose a suitable UI component library in uni-app
- Chapter 16: Constructing the Magic Square for Prime Numbers of Order n(5,7)
- 中断及pendSV
- 2022.07.26_每日一题
- 2022.07.26_Daily Question
- Zotero | Zotero translator plugin update | Solve the problem that Baidu academic literature cannot be obtained
- One of the small practical projects - food alliance ordering system
- DAY18:XSS 漏洞
- Titanic 预测问题
猜你喜欢

Difficulty comparison between high concurrency and multithreading (easy to confuse)

Titanic 预测问题

One of the small practical projects - food alliance ordering system

那些破釜沉舟入局Web3.0的互联网精英都怎么样了?

【 TA - frost Wolf _may - "one hundred plan" 】 art 2.3 hard surface

服务器和客户端信息的获取

链表实现及任务调度

‘vite‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

2022.07.14_Daily Question

2022.07.13_每日一题
随机推荐
Install the gstreamer development dependency library to the project sysroot directory
DAY18:Xss 靶场通关手册
leetcode 406. Queue Reconstruction by Height 根据身高重建队列(中等)
从 Google 离职,前Go 语言负责人跳槽小公司
Zero-Shot Learning & Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
那些破釜沉舟入局Web3.0的互联网精英都怎么样了?
2022.07.13_每日一题
Titanic 预测问题
One of the small practical projects - food alliance ordering system
我开发了一个利用 Bun 执行 .ts / .js 文件的 VS Code 插件
2022.07.13 _ a day
服务器和客户端信息的获取
interrupt and pendSV
事务的传播机制
SCI写作指南
2022.07.14_每日一题
postgresql源码学习(33)—— 事务日志⑨ - 从insert记录看日志写入整体流程
Financial leasing business
【Go语言入门教程】Go语言简介
庐山谣寄卢侍御虚舟