LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)
1. 题目
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。
要求返回这个链表的深拷贝。
《剑指Offer》同题:面试题35. 复杂链表的复制
2. 解题
类似题目:LeetCode 1484. 克隆含随机指针的二叉树(哈希/递归)
- 哈希表存储映射《原节点,新节点》
class Solution {public:Node* copyRandomList(Node* head) {if(head == NULL)return NULL;unordered_map<Node*, Node*> m;//原节点-新节点 哈希表Node *cur = head, *newNode;while(cur != NULL)//先创建新节点,赋值{newNode = new Node(cur->val);m[cur] = newNode;cur = cur->next;}cur = head;while(cur != NULL)//再次遍历,查表,把新节点指针付进去{m[cur]->next = m[cur->next];m[cur]->random = m[cur->random];cur = cur->next;}return m[head];}
};
- 原地算法,先复制一遍链表
a ->a.-> b-> b.-> ...
- 接好新链表random
- 拆开两条链表
class Solution {public:Node* copyRandomList(Node* head) {if(!head)return NULL;Node* cur = head, *newNode, *H;while(cur)//复制一遍原链表 a a` b b`... {newNode = new Node(cur->val);newNode->next = cur->next;cur->next = newNode;cur = newNode->next;}cur = head;newNode = cur->next;while(cur)//把新链表的random接好{if(cur->random)newNode->random = cur->random->next;cur = cur->next->next;if(cur)newNode = cur->next;}cur = head;H = newNode = cur->next;while(newNode->next)//两条链表拆开{cur->next = newNode->next;newNode->next = newNode->next->next;cur = cur->next;newNode = newNode->next;}cur->next = NULL;return H;}
};
LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)相关推荐
- LeetCode 138 复制带随机指针的链表-中等
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点. 构造这个链表的 深拷贝. 深拷贝应该正好由 n 个 全新 节点组成,其中每个新 ...
- LeetCode 138 复制带随机指针的链表
题目描述 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深拷贝. 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表.每个节点 ...
- Leetcode 138. 复制带随机指针的链表 解题思路及C++实现
解题思路: 主要包括三步. 第一步是遍历一次链表,复制其每一个节点,并将所复制的节点接在其后. 第二步是遍历一次链表,解决拷贝节点的random指针的指向. 第三步是从这个大链表中,拆出原有链表和拷贝 ...
- 138. 复制带随机指针的链表 golang
138. 复制带随机指针的链表 这个题结构体特殊,需要更改上一篇博客的node结构体 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深 ...
- leetcode 138. Copy List with Random Pointer | 138. 复制带随机指针的链表(复杂链表的复制)
题目 https://leetcode.com/problems/copy-list-with-random-pointer/ 题解 复杂链表的复制,经典问题,考察与 HashMap 的结合.注意如果 ...
- 138. 复制带随机指针的链表
链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/ https://www.jiuzhang.com/solution ...
- 剑指offer T35 复制带随机指针的链表(考察深拷贝的实现)
题目考察如何实现DeepCopy case1: 然后可以边遍历边创建对应的复制节点,并且使用一个Map来保存原来的节点以及复制后的节点的映射关系,之后再去遍历原链表,基于原节点的next和random ...
- 【刷题日记】3.复制带随机指针的链表
目录 一.题目介绍 编辑 二.题目分析 三.代码实现 题目链接:138. 复制带随机指针的链表 - 力扣(LeetCode) 一.题目介绍 我们最一开始看到题目可能会没有思路,或者压根就不知道如何下 ...
- M1: 复制带随机指针的链表
一个链表问题:复制带随机指针的链表 题目:有一个链表L,其每个节点有2个指针,一个指针next指向链表的下个节点,另一个random随机指向链表中的任一个节点,可能是自己或者为空,写一个程序,要求复制 ...
最新文章
- 质数,约数(数论) AcWing算法课
- poj -- 1185 炮兵阵地
- python汇率编程_【菜鸟学Python】案例一:汇率换算
- C# lock 语法糖实现原理--《.NET Core 底层入门》之自旋锁,互斥锁,混合锁,读写锁...
- jakarta ee_关于Jakarta EE软件包名称更改的思考
- Number.parseInt(), Number.parseFloat()
- VIP4.0-MQ消息中间件在分布式系统中的作用
- java从入门到精通_Java大数据:数据库开发从入门到精通
- 2017c语言国二试题,国家计算机c语言二级考试试题
- java 泛型对象实例化_java泛型对象的实例化
- 水仙花数,用scratch编程实现
- 2021-2027全球与中国创建和销售在线课程平台市场现状及未来发展趋势
- kmeans聚类理论篇
- 良心分享!最全面cmd快捷指令及使用方法,万字总结
- laravel mysql 时区_Laravel时区设置
- iOS: pch 如何添加项目中
- 直播、录播、录视频等
- Chrome浏览器使用谷歌翻译插件的正确方法
- 闲扯测试工程师之发展(觉得不错,拿来与大家分享)
- 数据库三大范式、BC范式、第四范式