Copy List with Random Pointer

原题链接Copy List with Random Pointer

深拷贝一个链表,链表节点的成员包括

  • 指向下一个节点的指针
  • 指向一个随机节点的指针
  • 节点值

主要的影响在随机节点的拷贝,处理不好会引发递归拷贝,解决方法是采用一个map记录原节点和复制后的节点

代码如下

/*** Definition for singly-linked list with a random pointer.* struct RandomListNode {*     int label;*     RandomListNode *next, *random;*     RandomListNode(int x) : label(x), next(NULL), random(NULL) {}* };*/
class Solution {
public:RandomListNode *copyRandomList(RandomListNode *head) {unordered_map<RandomListNode*, RandomListNode*> hash;return copyList(head, hash);}
private:RandomListNode* copyList(RandomListNode* head, unordered_map<RandomListNode*, RandomListNode*>& hash){if(!head)return nullptr;/* 拷贝过,直接返回 */if(hash.find(head) != hash.end())return hash[head];auto node = new RandomListNode(head->label);hash[head] = node;node->next = copyList(head->next, hash);node->random = copyList(head->random, hash);return node;}
};

每天一道LeetCode-----复制一个带有随机节点的链表相关推荐

  1. python 带随机指针的链表深度复制_链表--深度拷贝一个带有随机指针的链表

    链表--深度拷贝一个带有随机指针的链表 链表--深度拷贝一个带有随机指针的链表 本文介绍两种解法. 解法1:利用一个map ListNode *copyRandomList(ListNode *hea ...

  2. 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。

    今天和大家分享一道2009年代码为408的一道真题: 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链 ...

  3. 如何复制一个含有随机指针节点的链表

    复制含有随机指针节点的链表 一种特殊的链表节点类描述如下: public class Node {public int value;public Node next;public Node rand; ...

  4. 算法练习day10——190328(根据指定值划分单链表、复制含有rand指针节点的链表、两个单链表相交)

    1.将单向链表按某值划分成左边小. 中间相等. 右边大的形式 [题目] 给定一个单向链表的头节点head, 节点的值类型是整型, 再给定一个整数pivot. 实现一个调整链表的函数, 将链表调整为左部 ...

  5. 复制带随机节点的链表

    题目: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深拷贝. 解题思路: 这道题的一个难点就是链表中的随机指针,我能想到的就是在这个链 ...

  6. leetcode算法题--复制带随机指针的链表★

    原题链接: https://leetcode-cn.com/problems/copy-list-with-random-pointer/ https://leetcode-cn.com/proble ...

  7. 带有头节点单链表,带有头节点单链表逆置的四种方法

    文章目录 带头结点的单链表 单链表逆置的四种做法 带头结点的单链表 链式存储结构:逻辑上相邻的数据元素,并不要求物理上也相邻: 单链表的代码实现 .h文件 #pragma once typedef i ...

  8. 写出一段代码将链表中的两个节点位置互换位置_面试 leetcode 算法专题系列(二)—— 链表...

    前言:只照着常考题去刷题确实是一种方法.但调研之后发现自己还是考虑不周,刷题刷的不应该是题,而是解题的思路和熟练程度.于是我决定重新组织一下刷题笔记的讲解顺序,不再以面试常考题来刷.而是以面试出题频率 ...

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

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

最新文章

  1. Lambda 表达式有何用处?如何使用?
  2. jdbc mysql 函数 慢_java jdbc addBatch()提交mysql速度过慢
  3. 笔记本电脑怎么清理灰尘_笔记本电脑维修|笔记本电脑CPU故障
  4. JauntVR中文版登陆小米商店,首波内容有《五十度黑》
  5. golang语言-1-go普及知识
  6. linux下=号与==号
  7. AbstractListView源码分析8
  8. php 命名空间(,PHP命名空间(Namespace)简明教程
  9. c语言lua读文件,file-io – 在Lua中逐行读取文件
  10. Nodejs 批量检测 Excel 中url链接是否可访问
  11. 关于MFC窗口句柄,窗口ID,窗口指针
  12. 罪恶都市联机器无法显示服务器,《GTA:罪恶都市》多人联机!你的童年又回来了,梦想成真了!...
  13. 详解推荐系统的算法与应用
  14. 投影仪融合+拼接处理系统制作原理
  15. 建筑企业数字化转型关键问题及解决方案
  16. 中国网络词“no zuo no die”被收入美国俚语词典
  17. 智能陈桥输入法软件测试,智能陈桥 for linux 版本发布
  18. Shiro (一) --------- 认识 Shiro
  19. 计算机结构化面试万能套话,结构化面试30句万能套话拯救你.pdf
  20. lucene geohash 在外卖场景中,商家不规则多边形配送范围技术应用

热门文章

  1. Java黑皮书课后题第6章:**6.31(金融应用:信用卡号的合法性验证)和**6.32 编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的
  2. java一维数组的特点,数据结构:java数组特点以及声明数组类
  3. ArcGIS API for JavaScript Bookmarks(书签)
  4. 创建calico网络报错client response is invalid json
  5. HTML5 Audio标签API整理(三)
  6. JavaScript 实现块级作用域
  7. [LNMP]——LNMP环境配置
  8. hdu 1075 map
  9. Oracle 常用dump命令
  10. php写新闻浏览历史,PHP实现浏览历史记录