138. 复制带随机指针的链表
链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/
https://www.jiuzhang.com/solutions/copy-list-with-random-pointer/
/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node* random;Node(int _val) {val = _val;next = NULL;random = NULL;}
};
*/class Solution {
public:Node * copy_list(Node* head) {Node* new_head = head;Node* cur = head;while (cur) {Node* node = new (std::nothrow) Node(cur->val);node->random = cur->random;Node* next = cur->next;cur->next = node;node->next = next;cur = next;}return new_head;}Node * copy_random(Node* head) {Node* new_head = head;Node* cur = head;while (cur) {Node* copy = cur->next;if (cur->random) {copy->random = cur->random->next; }cur = copy->next;}return new_head;}Node * skip_list(Node* head) {Node* h2 = nullptr;Node* cur = head;while (cur) {Node* copy = cur->next;Node* next = copy->next;if (!h2) {h2 = copy;}cur->next = next;if (next) {copy->next = next->next;}cur = next;}return h2;}Node* copyRandomList(Node* head) {copy_list(head);copy_random(head);return skip_list(head);}
};
/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node* random;Node() {}Node(int _val, Node* _next, Node* _random) {val = _val;next = _next;random = _random;}
};
*/class Solution {public:Node* copyRandomList(Node* head) {if (!head) return head;Node* cur = head;while (cur) {// 注意random指针赋值为nullptrNode* copy = new Node(cur->val, nullptr, nullptr);copy->next = cur->next;cur->next = copy;cur = copy->next;}// 更新random指针cur = head;while (cur) {if (cur->random) {cur->next->random = cur->random->next;}cur = cur->next->next;}// 拆分两个链表Node dummy;cur = head;Node* copy_cur = &dummy;while(cur) {copy_cur->next = cur->next;copy_cur = copy_cur->next;cur->next = cur->next->next;cur = cur->next; }return dummy.next;}
};
138. 复制带随机指针的链表相关推荐
- 138. 复制带随机指针的链表 golang
138. 复制带随机指针的链表 这个题结构体特殊,需要更改上一篇博客的node结构体 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深 ...
- LeetCode 138 复制带随机指针的链表-中等
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点. 构造这个链表的 深拷贝. 深拷贝应该正好由 n 个 全新 节点组成,其中每个新 ...
- LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)
1. 题目 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深拷贝. <剑指Offer>同题:面试题35. 复杂链表的复制 2 ...
- LeetCode 138 复制带随机指针的链表
题目描述 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深拷贝. 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表.每个节点 ...
- Leetcode 138. 复制带随机指针的链表 解题思路及C++实现
解题思路: 主要包括三步. 第一步是遍历一次链表,复制其每一个节点,并将所复制的节点接在其后. 第二步是遍历一次链表,解决拷贝节点的random指针的指向. 第三步是从这个大链表中,拆出原有链表和拷贝 ...
- leetcode 138. Copy List with Random Pointer | 138. 复制带随机指针的链表(复杂链表的复制)
题目 https://leetcode.com/problems/copy-list-with-random-pointer/ 题解 复杂链表的复制,经典问题,考察与 HashMap 的结合.注意如果 ...
- 【刷题日记】3.复制带随机指针的链表
目录 一.题目介绍 编辑 二.题目分析 三.代码实现 题目链接:138. 复制带随机指针的链表 - 力扣(LeetCode) 一.题目介绍 我们最一开始看到题目可能会没有思路,或者压根就不知道如何下 ...
- M1: 复制带随机指针的链表
一个链表问题:复制带随机指针的链表 题目:有一个链表L,其每个节点有2个指针,一个指针next指向链表的下个节点,另一个random随机指向链表中的任一个节点,可能是自己或者为空,写一个程序,要求复制 ...
- 【力扣】复制带随机指针的链表题解 C语言实现
前言 这是力扣里的一道经典链表题,据说掌握此题你对链表的理解能力就是优秀水平了 题目 /*** Definition for a Node.* struct Node {* int val;* str ...
最新文章
- 博士因高校“虚假招聘”待遇不符辞职,却反被索要138万违约金,这是什么操作?...
- 宏基因组实战4. 基因注释Prokka
- iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)
- 软件开发的比喻:园艺
- 嵌入式学习路线怎么学,如何学习嵌入式系统
- OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize()
- **设计模式中的常用原则
- 多商户商城源码_多商户商城APP开发解决方案
- 通过给目标函数增加一个正则项来防止其过拟合
- ssh架构之hibernate(二)进阶学习
- 开源的49款Java 网络爬虫软件
- 字符数字转换 atoi 与 strtol
- 禁忌搜索算法c语言代码,禁忌搜索算法CC++源代码.doc
- 达梦数据库的约束键以及高级查询小结
- Docker端口映射实例
- 国家队上场——国家测绘局网络地图网站评测
- oracle rac 数据同步原理,从HDS VSP G1000的ORACLE RAC双活测试报告了解其实现原理
- 史上最全的Windows进程详解!
- HCIE课程笔记18-局域网二层技术
- Windows下快速获取一个文件夹下所有文件的名称列表
热门文章
- CUDA学习(九十七)
- Python Day10 MySQL 01
- Java多线程知识点整理(Lock锁)
- python基础===字符串的制表,换行基础操作
- socket服务端处理多个客户端的请求学习理解
- Android 系统定时管理器AlarmManager的使用
- 关于JSP的淘汰问题(转)
- INFO: task java:27465 blocked for more than 120 seconds不一定是cache太大的问题
- 【MySQL】MySQL for Mac 环境变量的配置
- A Python example for HiveServer2