题目

public class Node{public int value;public Node next;public Node rand;public Node(int data){this.value=data;}
}

Node类中除了包含value和next指针,还有一个rand指针,该指针可能指向链表中的任意一个节点包括null。

给定一个链表,需要对该链表进行复制并返回复制后的链表头节点。

输入 输出
1->2->3->null 1'->2'->3'->null

思路

初阶的解法可以做到时间复杂度为O(N),额外空间复制度为O(N),需要使用哈希表。具体过程如下:

  1. 遍历链表,对应每个节点产生副本节点,并分别作为key和value放入哈希表中。
  2. 再次遍历链表,设置副本节点的next和rand指针
  3. 将副本节点的头节点作为结果返回

源码

public class Node{public int value;public Node next;public Node rand;public Node(int data){this.value=data;}
}public Node copyListWithRand1(Node head){HashMap<Node,Node> map=new HashMap<Node,Node>();Node cur=head;while(cur!=null){map.put(cur,new Node(cur.value));cur=cur.next;}cur=head;while(cur!=null){map.get(cur).next=map.get(cur.next);map.get(cur).rand=map.get(cur.rand);cur=cur.next;}return map.get(head);
}

链表问题9——复制含有随机指针节点的链表(初阶)相关推荐

  1. 链表问题9——复制含有随机指针节点的链表(进阶)

    题目 具体题目信息可以参考上一篇文章. 进阶:不使用额外的数据结构,只用有限几个变量,且在时间复杂度为O(N)内完成原问题要实现的函数. 思路 进阶解法不使用哈希表来保存对应关系,而只采用有限的几个变 ...

  2. 数据结构与算法之复制含有随机指针节点的链表和两个链表相交的一系列问题

    数据结构与算法复制含有随机指针节点的链表和两个链表相交的一系列问题 目录 复制含有随机指针节点的链表 两个链表相交的一系列问题 1. 复制含有随机指针节点的链表 题目概述 思路:创建一个HashMap ...

  3. 左神算法:复制含有随机指针节点的链表 / 复杂链表的复制(Java版本)

    本题来自左神<程序员代码面试指南>"复制含有随机指针节点的链表"题目. 题目 一种特殊的链表节点类描述如下: public static class Node {pub ...

  4. 复制含有随机指针节点的链表~哈希表的使用~(⌒▽⌒)

    题目意思就是说给你给head 的Node节点(这是一个比较特殊的链表),来拷贝出它地结构出来. 方法一:借助HashMap的特性,定义一个HashMap<Node,Node> map对象, ...

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

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

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

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

  7. 左神算法基础班3_13深度拷贝含有随机指针的链表

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

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

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

  9. 复制带有random指针的单链表

    如图1所示,有一条单链表,其节点除了有next指针外,还有一个random指针.random指针可指向单链表中的任意节点,包括它自身.random指针一旦指定,便不再更改.请设计算法,复制此单链表,并 ...

最新文章

  1. Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
  2. Linux下/dev/null 21 相关知识说明
  3. 解决Jenkins升级时浏览器一直提示Please wait while Jenkins is restarting问题
  4. Xamarin.Android开发实践(十八)
  5. 绅士计算机乐谱之谦,绅士(简单钢琴独奏版)
  6. 堆排序-Python
  7. 【数据分析】百度内部报告解析00后移动互联网行为
  8. Linux驱动编程 step-by-step (三) 字符设备中 重要的数据结构
  9. 缓存机制与局部性原理
  10. java是一种,java是一种编译程序吗
  11. 用Java实现HTTP文件队列下载
  12. 《从零开始学Swift》学习笔记(Day 53)——do-try-catch错误处理模式
  13. 学英语三个月超过你过去学三年
  14. Android仿自如客APP裸眼3D效果
  15. java学习day10(Java基础)特殊类
  16. iOS开发之3DTouch集成
  17. [转]拍照怎么搜题?(下)
  18. html table 表格脚,HTML表格table
  19. 三观不合,永远不会是一路人!
  20. 五十道编程小题目 --- 50 有五个学生,每个学生有3门课的成绩,计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件stud中java

热门文章

  1. 西工大开源拥挤人群数据集生成工具,大幅提升算法精度 | CVPR 2019
  2. 一文教会你三维网格物体识别
  3. AI与区块链的融合会给人类带来什么?
  4. 如何在浏览器上跑深度学习模型?并且一行JS代码都不用写
  5. 专访 | 商汤HPC负责人刘文志(风辰):未来战略的两大方向及招人的4个标准
  6. 颜值绝绝子的swagger-ui
  7. Java外卖点餐系统
  8. 面试官写了个双冒号::问我这是什么语法?Java中有这玩意?
  9. 如何使ResNet优于EfficientNet?
  10. 神了!7行代码建起360亿的支付帝国