原题链接:
https://leetcode-cn.com/problems/copy-list-with-random-pointer/
https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/
1、map+递归

map<Node*,Node*> map;
Node* copyRandomList(Node* head) {if(head==NULL){return NULL;}if(map.count(head)){//如果已经复制了该节点,则直接返回即可return map[head];}Node* node=new Node(head->val);//复制该节点map[head]=node;//将该节点对应的新建节点存入map,再次遍历到该节点时,则直接返回node->next=copyRandomList(head->next);//递归复制该节点的next指针和random指针node->random=copyRandomList(head->random);return node;
}

2、map+迭代

map<Node*,Node*> map;Node* getClonedNode(Node* node){if(node!=NULL){if(map.count(node)){return map[node];}else{Node *tmp=new Node(node->val);map[node]=tmp;return tmp;}}return NULL;
}
Node* copyRandomList(Node* head) {if(head==NULL){return NULL;}Node* oldNode=head;Node* newNode=new Node(oldNode->val);//创建新节点map[oldNode]=newNode;while(oldNode!=NULL){//在旧链表上迭代,复制所有节点newNode->random=getClonedNode(oldNode->random);//获取random指针引用的节点的克隆newNode->next=getClonedNode(oldNode->next);//获取next指针引用的节点的克隆oldNode=oldNode->next;newNode=newNode->next;}return map[head];
}

3、交错链表

第一步(来源):复制原始节点,生成交错链表
第二步:链接复制节点

第三步:分解交错链表,返回复制节点链表

Node* copyRandomList(Node* head) {if(head==NULL){return NULL;}//创建原始节点和复制节点交错的链表Node* p=head;Node* newNode=NULL;while(p!=NULL){newNode=new Node(p->val);newNode->next=p->next;p->next=newNode;p=newNode->next;}p=head;while(p!=NULL){//依据原始节点对复制节点的random进行链接p->next->random=(p->random!=NULL)?p->random->next:NULL;p=p->next->next;   }//将链表分解,以获得原始节点链表和复制节点链表p=head;newNode=p->next;while(p!=NULL&&p->next!=NULL){Node *tmp=p->next;p->next=tmp->next;p=p->next;tmp->next=(p!=NULL)?p->next:NULL;}return newNode;
}

leetcode算法题--复制带随机指针的链表★相关推荐

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

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

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

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

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

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

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

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

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

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

  6. java 链表复制_Java 算法 - 复制带随机指针的链表

    前段时间在做一个项目,所以没有时间做面试题,最近才将那个科创项目做的差不多了,于是开始做面试题了. 题意: 给出一个链表,每个节点包含一个额外增加的随机指针可以指向链表中的任何节点或空的节点. 返回一 ...

  7. 【数据结构与算法】之深入解析“复制带随机指针的链表”的求解思路与算法示例

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

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

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

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

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

最新文章

  1. GridView 导出为Excel
  2. JavaCore/HeapDump文件及其分析方法
  3. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第3章-基于代数连通度估计的多智能体系统群集运动控制
  4. Android --- RecycleView 中默认选择第一个 item,点击第 2 个 item 时改变其字体样式,其余的 item 的字体样式恢复默认
  5. C语言中assert()断言函数的概念及用法
  6. cropper初始化_jQuery.cropper中文API详解
  7. Firefox已阻止此网站安装未经验证的附加组件的解决办法
  8. java的反射机制(第二篇)
  9. java 反射 main_java – 通过反射访问main方法中的局部变量
  10. leetcode数组汇总_LeetCode刷题实战74:搜索二维矩阵
  11. Power Builder软件的下载安装
  12. edius隐藏快捷键_edius8常用快捷键有哪些|edius快捷键使用大全汇总 - 软件教程 - 格子啦...
  13. 越狱装源未能连接到服务器,科普cydia无法加载源地址插件安装错误解决方法及Cydia怎么备份shsh...
  14. 上海科技大学信息科学与技术学院夏令营
  15. 21张手机壁纸,送给我爱的你们~
  16. 查询-SPJ练习1参考答案
  17. 深度思考故事1:贴发票和贴海报
  18. SSH连接时候出现 REMOTE HOST IDENTIFICATION HAS CHANGED
  19. VLSM子网掩码详解!!
  20. JAVA面试-系统设计题

热门文章

  1. python while循环语句-python while循环控制流语句结构与用法
  2. python基础教程书籍推荐-初学者python入门必看书籍推荐(上)
  3. 财务人员学python有用吗-python在财务里面有用吗
  4. python读取大文件-使用Python读取大文件的方法
  5. 小学生python编程教程入门-围观~山东省的小学生Python编程入门都学的什么?
  6. maven创建多模块项目
  7. synchronize和lock的区别 synchionzie与volatile的区别
  8. HDU2044 一只小蜜蜂…(简单递推)
  9. excel vba 不可查看
  10. Table——高淇JAVA300讲笔记之Guava