题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

解题思路

链表的结构大体如下:

真正的难点在于怎样复制这个random的结构。参考了dalao提出的思路,结合个人理解,总结如下:
复制总共需要遍历两边链表,第一遍是复制A到E,这一遍仅仅复制next指针,把新的节点加入到原来节点的后面,应该是这个效果:
然后在复制random指针,后来复制的random指针只需要在原来节点的random指针后边就行了。

这种复制方式给了我们复制数据结构的一种新的思路!注意一个坑:不要破坏原来链表的结构!!!!!

AC代码

class Solution {public:RandomListNode* Clone(RandomListNode* pHead) {if(pHead == nullptr) {return nullptr;}using Node = RandomListNode;// 第一遍复制,等效为后移Node* p = pHead;while(p != nullptr) {Node* node = new Node(p->label);node->next = p->next;p->next = node;p = node->next;}// 第二遍复制random指针p = pHead;while(p != nullptr) {if(p->random != nullptr) {p->next->random = p->random->next;}p = p->next->next;}// 提取出偶数节点,注意复制不能破坏原有链表的结构!!!Node* pre = pHead;p = pHead->next;Node* head = p;while(pre != nullptr) {pre->next = p->next;pre = pre->next;if(pre != nullptr) {p->next = pre->next;}p = p->next;}return head;}
};

剑指Offer之复杂链表的复制相关推荐

  1. 【LeetCode】剑指 Offer 35. 复杂链表的复制

    [LeetCode]剑指 Offer 35. 复杂链表的复制 文章目录 [LeetCode]剑指 Offer 35. 复杂链表的复制 package offer;import java.util.Ar ...

  2. 剑指 Offer 35. 复杂链表的复制

    剑指 Offer 35. 复杂链表的复制 题目 题目链接 解题思路 题目理解 解题思路 具体代码 题目 题目链接 https://leetcode-cn.com/problems/fu-za-lian ...

  3. 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和

    一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...

  4. 【三次优化】剑指 Offer 35. 复杂链表的复制

    立志用最少代码做最高效的表达 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意 ...

  5. 剑指offer——35复杂链表的复制

    这题很是巧妙. 突破了常规思维. 竟然可以把传入进来的链表和复制的链表链在一起.然后再算出slibling指针.最后在分离. 直接把空间复杂度变为O(1)了. 很巧妙,很实用. 题目: 请实现函数Co ...

  6. 剑指 Offer 35. 复杂链表的复制(哈希/衍生拆分图解)

    题目描述 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null. ...

  7. LeetCode笔记】剑指 Offer 35. 复杂链表的复制(Java、哈希表、原地算法)

    文章目录 题目描述 思路 && 代码 1. 哈希表法 2. 原地算法 二刷 题目描述 主要有两个考虑点: 不能改变原链表 新链表赋予 next.random 时,复制结点不一定存在 思 ...

  8. 【算法】剑指 Offer 35. 复杂链表的复制 【重刷】

    1.概述 地址:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/ 请实现 copyRandomList 函数,复制一个复 ...

  9. 剑指 Offer JZ35 复杂链表的复制

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一 ...

最新文章

  1. WCF分布式开发步步为赢(1):WCF分布式框架基础概念
  2. Linux下解决“shutdown: command not found“问题
  3. 银联高校极客挑战赛 初赛 第一场、第二场合集(3+3题)
  4. 100条常用写作谚语(5)(6)(7)(8)
  5. 地图点随机分布均匀_英国标准协会(BSI)推荐的三坐标测点分布策略
  6. c语言程序设计自学跟谁好,双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好...
  7. c mysql 并发处理_mysql队列中实现并发读的实现方法解析
  8. LeetCode 1115. 交替打印FooBar
  9. Atitit 循环处理的新特性 for...else...
  10. 采用软改的方式激活Windows 7
  11. 实习工作日志 2019.03.06
  12. 柯洁夺斗地主全国冠军!斗地主可以排解输棋痛苦”
  13. 人工智能学python还是c_考虑到未来人工智能的发展,应该学习C++/C语言还是Python语言?...
  14. 判断用户输入的8位信用卡号码是否合法
  15. 安装floodlight ant时出错
  16. uwp windows_如何在Windows 10的UWP游戏中监视FPS
  17. 偏财入财库大富_八字有财库者大富
  18. 免费获取节假日API地址
  19. 解决pycharm更新pip问题
  20. kubernetes资源对象kind

热门文章

  1. 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
  2. Bootstrap 容器(container)
  3. 牛客寒假算法基础集训营4
  4. PyTorch 学习笔记(三):transforms的二十二个方法
  5. Java 实验5 T3 将十进制转换为二进制
  6. 一维前缀和(附模板题)
  7. PyTorch报错“/.../Loss.cu: ... [59,0,0] Assertion input_val >= zero input_val <= one failed.”
  8. Jacobi matrix——一种对向量方程的梯度描述方式
  9. Youki的笔记本配置要求
  10. win10任务栏图标存放路径