1 /*
 2 struct RandomListNode {
 3     int label;
 4     struct RandomListNode *next, *random;
 5     RandomListNode(int x) :
 6             label(x), next(NULL), random(NULL) {
 7     }
 8 };
 9 */
10 class Solution
11 {
12 public:
13     //在旧链表中创建新链表,此时不处理新链表的兄弟结点
14     void CloneNode(RandomListNode* pHead)
15     {
16         RandomListNode* pNode = pHead;
17         while(pNode != NULL)
18         {
19             RandomListNode* newNode = new RandomListNode(pNode->label);
20             newNode->next = pNode->next;
21
22             pNode->next = newNode;
23             pNode = newNode->next;
24         }
25     }
26     //根据旧链表的random结点,初始化新链表的random结点
27     void CloneRandomNode(RandomListNode* pHead)
28     {
29         RandomListNode* pNode = pHead;
30         while(pNode != NULL)
31         {
32             RandomListNode* pNewNode = pNode->next;
33             if(pNode->random != NULL)
34                 pNewNode->random = pNode->random->next;
35             pNode = pNewNode->next;
36         }
37     }
38     //从旧链表中拆分得到新链表
39     RandomListNode* getNewList(RandomListNode* pHead)
40     {
41         RandomListNode* pNode = pHead;
42         RandomListNode* pClonedHead = pHead->next;
43         RandomListNode* pClonedNode = pHead->next;
44
45         pNode->next = pClonedNode->next;
46         pNode = pNode->next;
47
48         //循环
49         while(pNode!=NULL)
50         {
51             pClonedNode->next = pNode->next;
52             pClonedNode = pClonedNode->next;
53             pNode->next = pClonedNode->next;
54             pNode = pNode->next;
55         }
56         return pClonedHead;
57     }
58     RandomListNode* Clone(RandomListNode* pHead)
59     {
60         if(pHead==NULL) return NULL;
61         CloneNode(pHead);
62         CloneRandomNode(pHead);
63         return getNewList(pHead);
64     }
65 };

转载于:https://www.cnblogs.com/lca1826/p/6496690.html

[剑指Offer] 25.复杂链表的复制相关推荐

  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之复杂链表的复制

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

最新文章

  1. 计算机多媒体运用的ppt课件,《计算机多媒体》PPT课件.ppt
  2. RocketMQ消息丢失场景及解决办法
  3. 50+篇《神经架构搜索NAS》2020论文合集
  4. boost::math模块使用正态分布的示例
  5. leetcode 1232. 缀点成线
  6. mysql update实质,UPDATE注射(mysql+php)的两个模式
  7. 加餐:Redis 的可视化管理工具
  8. 收藏!最强行人检测算法思维导图
  9. BZOJ 1571: [Usaco2009 Open]滑雪课Ski
  10. linux_smb.conf配置详解_IT技术论文
  11. 青龙面板之【花花阅读】【抖抖健身】
  12. 用Raspberry Pi作AirPlay服务端
  13. kali 克隆网页_Web侦察工具HTTrack (网站克隆)
  14. 20款英文LOGO字体
  15. 知识蒸馏 综述 Knowledge Distillation: A Survey
  16. 常见的服务器操作系统和工作站操作系统
  17. Unity 如何实现一个强大的MMO技能系统!
  18. C#反射的实现原理及简单应用
  19. STM32替换Arduino直通车
  20. arcgis更改图层坐标系_ArcGIS API for JavaScript 4.16 局部场景添加自定义坐标系的场景图层(已修改)...

热门文章

  1. 【POJ - 2255】Tree Recovery (给定树的先序中序,输出后序)
  2. SpringMVC配置视图的直接映射view-controller命名空间
  3. nmon监控linux内存,使用Nmon监控Linux系统性能
  4. 如何将mysql的数据库渲染到页面_vue.js实现数据库的JSON数据输出渲染到html页面功能示例...
  5. python 可视化大屏幕_如何用python搭建可视化看板?
  6. Oracle中计算两个时间的时间差:
  7. leetcode55 跳跃游戏 秒杀所有答案
  8. leecode62 不同路径
  9. mysql——JDBC
  10. 链表的代码实现【数据结构F】