public RandomListNode copyRandomList(RandomListNode head) {
/*
深复制,就是不能只是复制原链表变量,而是做一个和原来链表一模一样的新链表,
每一个节点都是新建的,而不是指向就节点
这个题的难点在于:随机节点。
随机节点有可能指向后边还没有建立的节点,这就没法指。
方法一:一一对应地记录每个新旧节点的映射关系,在常规节点建立后,就去查哈希表,找到对应
新节点的旧节点的random,就是新节点的random
*/
if (head==null)
return null;
Map<RandomListNode,RandomListNode> map = new HashMap<>();
//新节点
RandomListNode n = new RandomListNode(head.label);
//记住:二叉树、链表这种前后有关联的数据结构,要迭代(注意是迭代方式)遍历的时候,一定要建立一个结构代表当前节点,往下遍历(递归看情况)
RandomListNode curN=n,curO=head;
map.put(curO,curN);
//先复制常规节点
while (curO.next!=null)
{
//复制节点
curN.next = new RandomListNode(curO.next.label);
curN = curN.next;
curO = curO.next;
//建立映射
map.put(curO,curN);
}
//复制random之前先初始化两个cur
curN = n;
curO = head;
while (curN!=null)
{
if (curO.random!=null)
{
//通过映射找到random
curN.random = map.get(curO.random);
}
curN = curN.next;
curO = curO.next;
}
return n;
}

[leetcode]138. Copy List with Random Pointer复制带有随机指针的链表的更多相关文章

  1. [LeetCode] 138. Copy List with Random Pointer 拷贝带有随机指针的链表

    A linked list is given such that each node contains an additional random pointer which could point t ...

  2. [LeetCode] 138. Copy List with Random Pointer 拷贝带随机指针的链表

    A linked list is given such that each node contains an additional random pointer which could point t ...

  3. [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表

    A linked list is given such that each node contains an additional random pointer which could point t ...

  4. [Leetcode] Copy list with random pointer 对带有任意指针的链表深度拷贝

    A linked list is given such that each node contains an additional random pointer which could point t ...

  5. 力扣——Copy List with Random Pointer(复制带随机指针的链表) python实现

    题目描述: 中文: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深拷贝. 示例: 输入:{"$id":" ...

  6. leetcode 138. Copy List with Random Pointer复杂链表的复制

    python代码如下: # Definition for singly-linked list with a random pointer. # class RandomListNode(object ...

  7. Java for LeetCode 138 Copy List with Random Pointer

    A linked list is given such that each node contains an additional random pointer which could point t ...

  8. leetcode 138. Copy List with Random Pointer ----- java

    A linked list is given such that each node contains an additional random pointer which could point t ...

  9. Leetcode#138 Copy List with Random Pointer

    原题地址 非常巧妙的方法,不需要用map,只需要O(1)的额外存储空间,分为3步: 1. 先复制链表,但是这个复制比较特殊,每个新复制的节点添加在原节点的后面,相当于"加塞"2. ...

随机推荐

  1. LeetCode 018 4Sum

    题目描述:4Sum Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c ...

  2. kafka监听出现的问题,解决和剖析

    问题如下: kafka为什么监听不到数据 kafka为什么会有重复数据发送 kafka数据重复如何解决 为什么kafka会出现俩个消费端都可以消费问题 kafka监听配置文件 一. 解决问题一(kaf ...

  3. 欢迎使用CSDN-markdown编辑器(这个只能看到一次保存一下)

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接 ...

  4. Python中迭代循环使用比较多的range函数的作用

    range函数用于生成一个不可变的数字序列可迭代对象,类型为range,该数字序列通常用于在 for 循环中循环指定的次数. 具体可参考:<Python中与迭代相关的函数>的详细介绍 老猿 ...

  5. PyQt学习随笔:Qt事件类QEvent详解

    QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通 ...

  6. pandas 标签映射成数值的几种方法

    1. preprocessing.LabelEncoder() import pandas as pd from sklearn import preprocessing le = preproces ...

  7. 小程序view的显示与隐藏

    需要在全局数据块中,设定一个控制键. data: { ......//省略其他代码 showView: true }, 然后是在wxml中,view的class中设置2个class,并用三目表达式来进 ...

  8. MySQL存储引擎:MyISAM和InnoDB的区别

    MyISAM和InnoDB的区别 定义 InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎.它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚.InnoD ...

  9. 通过url传递对象

    1.使用 encodeURI() 对对象进行编码 2.在另一个页面使用

  10. linux服务器性能分析只需1分钟

    背景: 现在的互联网公司,大多数时候应用服务都是部署在linux服务器上,那么当你的服务运行过程中出现了一些响应慢,资源瓶颈等疑似性能问题时,给你60秒,如何快速完成初步检测? 肯定有人会说用工具,公 ...