2019独角兽企业重金招聘Python工程师标准>>>

复制含有随机指针节点的链表

给定一个由Node节点类型组成的无环单链表的头节点head,写一个函数完成这个链表中所有结构的复制,并返回复制的新链表的头节点。

 

 

 

package com.javause.Algorithm.copyRandomNodeList;

import java.util.HashMap;

public class CopyListWithRand {

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;

创建指针next,

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);

}

public Node copyListWithRand2(Node head) {

if (head == null) {

return null;

}

Node cur = head;

Node next = null;

// 复制并连接每一个节点

while (cur != null) {

next = cur.next;

cur.next = new Node(cur.value);

cur.next.next = next;

cur = next;

}

cur = head;

Node curCopy = null;

// 设置复制节点的rand指针

while (cur != null) {

next = cur.next.next;

curCopy = cur.next;

curCopy.rand = cur.rand != null ? cur.rand.next : null;

cur = next;

}

Node res = head.next;

cur = head;

// 拆分

while (cur != null) {

next = cur.next.next;

curCopy = cur.next;

cur.next = next;

curCopy.next = next != null ? next.next : null;

cur = next;

}

return res;

}

}

转载于:https://my.oschina.net/iioschina/blog/1517532

复制含有随机指针节点的链表相关推荐

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

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

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

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

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

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

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

    题目 public class Node{public int value;public Node next;public Node rand;public Node(int data){this.v ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. springboot获取resources路径_Docker构建SpringBoot应用
  2. RedHat下JDK1.6安装-利用alternative实现多版本并存(Ubuntu同理)
  3. 关系数据库基础:函数依赖知识笔记
  4. 怎么打开网卡rss_RSS 进阶篇:Huginn - 真·为任意网页定制 RSS 源(PhantomJs 抓取)...
  5. 新商业时代最大的机会在于创业市场
  6. 字符串匹配——C++使用Regex
  7. DAY18 面向对象三大特性之继承
  8. silverlight:手写板/涂鸦/墨迹/InkPresenter示例程序
  9. 计算机管理格式化没有顺利完成,内存卡无法格式化
  10. vs2010中文旗舰下载地址
  11. Eclipse集成Zxing实现扫一扫功能
  12. 杭电(杭州电子科技大学)可视计算基础大作业:绝地求生吃鸡预测
  13. 如何将分表汇总到总表_如何把多个Excel表格合并到一起,分表变,总表也自动更新?...
  14. 澳大利亚每日电价和需求文本数据(2015-2020)
  15. 为什么淘宝京东使用不是每次都需要登录?
  16. 串口服务器采集需要通讯协议么,C2000-A2-SDX6000-CX1
  17. MySQL 系统表空间ibdata:我也不想当一个死肥宅
  18. 列主元高斯消去法(c语言)(可以实现所有阶的)(超级详细)
  19. 代码REVIEW的一般方法
  20. Revit二开,通过拾取获取面对象

热门文章

  1. Atitit 身份证 证件编码规范
  2. Atitit 数据库视图与表的wrap与层级查询规范
  3. Atitti  onvif 设备发现与原理
  4. atitit.gui界面纵向居中总结
  5. paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
  6. paip.c++ 常用类库attilax总结
  7. 拒绝外部投资、融资及收购,Epic是如何成为美国电子病历“一姐”的?
  8. 全球顶级银行资管子公司的启示
  9. (转)人工智能无处不在,这次是有公司用它来炒股
  10. CTP: 11:31分等非交易时段报单录入的应对