链接: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. 复制带随机指针的链表相关推荐

  1. 138. 复制带随机指针的链表 golang

    138. 复制带随机指针的链表 这个题结构体特殊,需要更改上一篇博客的node结构体 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深 ...

  2. LeetCode 138 复制带随机指针的链表-中等

    给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点. 构造这个链表的 深拷贝. 深拷贝应该正好由 n 个 全新 节点组成,其中每个新 ...

  3. LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)

    1. 题目 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深拷贝. <剑指Offer>同题:面试题35. 复杂链表的复制 2 ...

  4. LeetCode 138 复制带随机指针的链表

    题目描述 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深拷贝. 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表.每个节点 ...

  5. Leetcode 138. 复制带随机指针的链表 解题思路及C++实现

    解题思路: 主要包括三步. 第一步是遍历一次链表,复制其每一个节点,并将所复制的节点接在其后. 第二步是遍历一次链表,解决拷贝节点的random指针的指向. 第三步是从这个大链表中,拆出原有链表和拷贝 ...

  6. leetcode 138. Copy List with Random Pointer | 138. 复制带随机指针的链表(复杂链表的复制)

    题目 https://leetcode.com/problems/copy-list-with-random-pointer/ 题解 复杂链表的复制,经典问题,考察与 HashMap 的结合.注意如果 ...

  7. 【刷题日记】3.复制带随机指针的链表

    目录 一.题目介绍 ​编辑 二.题目分析 三.代码实现 题目链接:138. 复制带随机指针的链表 - 力扣(LeetCode) 一.题目介绍 我们最一开始看到题目可能会没有思路,或者压根就不知道如何下 ...

  8. M1: 复制带随机指针的链表

    一个链表问题:复制带随机指针的链表 题目:有一个链表L,其每个节点有2个指针,一个指针next指向链表的下个节点,另一个random随机指向链表中的任一个节点,可能是自己或者为空,写一个程序,要求复制 ...

  9. 【力扣】复制带随机指针的链表题解 C语言实现

    前言 这是力扣里的一道经典链表题,据说掌握此题你对链表的理解能力就是优秀水平了 题目 /*** Definition for a Node.* struct Node {* int val;* str ...

最新文章

  1. 博士因高校“虚假招聘”待遇不符辞职,却反被索要138万违约金,这是什么操作?...
  2. 宏基因组实战4. 基因注释Prokka
  3. iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)
  4. 软件开发的比喻:园艺
  5. 嵌入式学习路线怎么学,如何学习嵌入式系统
  6. OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize()
  7. **设计模式中的常用原则
  8. 多商户商城源码_多商户商城APP开发解决方案
  9. 通过给目标函数增加一个正则项来防止其过拟合
  10. ssh架构之hibernate(二)进阶学习
  11. 开源的49款Java 网络爬虫软件
  12. 字符数字转换 atoi 与 strtol
  13. 禁忌搜索算法c语言代码,禁忌搜索算法CC++源代码.doc
  14. 达梦数据库的约束键以及高级查询小结
  15. Docker端口映射实例
  16. 国家队上场——国家测绘局网络地图网站评测
  17. oracle rac 数据同步原理,从HDS VSP G1000的ORACLE RAC双活测试报告了解其实现原理
  18. 史上最全的Windows进程详解!
  19. HCIE课程笔记18-局域网二层技术
  20. Windows下快速获取一个文件夹下所有文件的名称列表

热门文章

  1. CUDA学习(九十七)
  2. Python Day10 MySQL 01
  3. Java多线程知识点整理(Lock锁)
  4. python基础===字符串的制表,换行基础操作
  5. socket服务端处理多个客户端的请求学习理解
  6. Android 系统定时管理器AlarmManager的使用
  7. 关于JSP的淘汰问题(转)
  8. INFO: task java:27465 blocked for more than 120 seconds不一定是cache太大的问题
  9. 【MySQL】MySQL for Mac 环境变量的配置
  10. A Python example for HiveServer2