当前位置:网站首页>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 <= 104Node.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;
}
}
边栏推荐
猜你喜欢

【科普向】5G核心网架构和关键技术
解决win11/win10在登陆界面(解锁界面)点击获取每日壁纸无效的问题 - get Daily Lockscreen and Wallpaper - Win11/10的登录界面背景图片在哪里?

DirectExchange switch simple introduction demo

双倍数据速率同步动态随机存储器(Double Data Rate Synchronous Dynamic Random Access Memory, DDR SDRAM)- 逻辑描述部分

简单谈谈Feign

【Go语言入门】一文搞懂Go语言的最新依赖管理:go mod的使用

Redux state management

360推送-360推送工具-360批量推送工具

Project exercise - memorandum (add, delete, modify, check)

HighTec 的安装与配置
随机推荐
codec2 BlockPool:不可读库
Postgresql source code learning (33) - transaction log ⑨ - see the overall process of log writing from the insert record
Zero-Shot Learning & Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
Detailed explanation of js prototype
二叉树的还原(反序列化)
安装gstreamer开发依赖库到项目sysroot目录
2.(1)栈的链式存储、链栈的操作(图解、注释、代码)
Zotero | Zotero translator插件更新 | 解决百度学术文献无法获取问题
Titanic 预测问题
【第四章】详解Feign的实现原理
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
基于LSTM的诗词生成
【Star项目】小帽飞机大战(七)
文件 - 07 删除文件: 根据fileIds批量删除文件及文件信息
【Go语言入门教程】Go语言简介
零样本学习&Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
CHI论文阅读(1)EmoGlass: an End-to-End AI-Enabled Wearable Platform for Enhancing Self-Awareness of Emoti
Chapter 16: Constructing the Magic Square for Prime Numbers of Order n(5,7)
第十六章:构建n(5,7)阶素数幻方
postgresql源码学习(34)—— 事务日志⑩ - 全页写机制