解题思路:

主要包括三步。

第一步是遍历一次链表,复制其每一个节点,并将所复制的节点接在其后。

第二步是遍历一次链表,解决拷贝节点的random指针的指向。

第三步是从这个大链表中,拆出原有链表和拷贝链表。

具体图解,课参考LeetCode官方图解。

/*
// 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* tmp = head;//遍历链表,复制每一个节点,并将其放在所复制节点之后while(tmp){Node* hh = new Node(tmp->val);hh->next = tmp->next;tmp->next = hh;tmp = hh->next;}tmp = head;//遍历链表,使得复制的节点的random指针指向正确的节点while(tmp){if(tmp->random == NULL) tmp->next->random = NULL;else tmp->next->random = tmp->random->next;if(tmp->next)tmp = tmp->next->next;else tmp = NULL;}Node* res = head->next;// tmp 记录原始的链表节点,tmp2记录新复制的链表节点tmp = head;   Node* tmp2 = head;while(tmp){tmp2 = tmp->next;tmp->next = tmp2->next;tmp = tmp->next;if(tmp) tmp2->next = tmp->next;else tmp2->next = NULL;}return res;}
};

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

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

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

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

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

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

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

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

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

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

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

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

    链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/ https://www.jiuzhang.com/solution ...

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

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

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

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

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

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

最新文章

  1. java三级考试_java web 学习 --第五天(Java三级考试)
  2. windows命令行无法启动redis_Win10 3分钟简单、快速安装Redis
  3. Ajax同步调用 异步排序
  4. C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
  5. php代码格式化工具 php-cs-fixer的使用
  6. 知识图谱最新权威综述论文解读:关系抽取
  7. Redis-集群监控之Redis monitor
  8. 4固定在底部_有线鼠标之灵魂伴侣,火线竞技4号RGB鼠标线夹
  9. 架构模式: 服务器端页面碎片化元素构建
  10. CCF NOI1058 统计单词
  11. 在win7在结构cocos2d-x v3.2rc0开发环境(For Android)
  12. 音响发烧友---HiFi音频功放
  13. win10 电脑桌面任务栏点击无反应
  14. Java教学视频全集,活见久
  15. 创建高保真的移动Demo(工具篇)
  16. 使用canvas绘制笑脸
  17. python写入excel怎么跨列居中_python文件读写(三)-Excel表格三剑客xlwt,xlrd,xlutils...
  18. 测试工程师面试题mysql_测试工程师sql笔试题都在这里了!
  19. JAVA Spring
  20. (转)网上摘抄:计算数学研究方向及网上资料

热门文章

  1. wxpython 安装_下载和安装wxPython
  2. linux下的trap命令
  3. 搭建mongodb分片
  4. Asp.Net Core 之 appsettings.json
  5. ubuntu 下安装 activate-power-mode
  6. 工厂三兄弟之简单工厂模式(二)
  7. datagridview当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。
  8. 高通msm8994启动流程简介
  9. [驱动注册]platform_driver_register()与platform_device_register()
  10. matlab intergral,matlab學習:人臉識別之HOG(Histograms of Oriented Gradients)