[leetcode]138. Copy List with Random Pointer复制带有随机指针的链表
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复制带有随机指针的链表的更多相关文章
- [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 ...
- [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 ...
- [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表
A linked list is given such that each node contains an additional random pointer which could point t ...
- [Leetcode] Copy list with random pointer 对带有任意指针的链表深度拷贝
A linked list is given such that each node contains an additional random pointer which could point t ...
- 力扣——Copy List with Random Pointer(复制带随机指针的链表) python实现
题目描述: 中文: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深拷贝. 示例: 输入:{"$id":" ...
- leetcode 138. Copy List with Random Pointer复杂链表的复制
python代码如下: # Definition for singly-linked list with a random pointer. # class RandomListNode(object ...
- 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 ...
- 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 ...
- Leetcode#138 Copy List with Random Pointer
原题地址 非常巧妙的方法,不需要用map,只需要O(1)的额外存储空间,分为3步: 1. 先复制链表,但是这个复制比较特殊,每个新复制的节点添加在原节点的后面,相当于"加塞"2. ...
随机推荐
- Beta——代码规范与计划
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 代码规范 此次代码规 ...
- Docker 与 Podman 容器管理的比较
翻译自 Paul Ferrill 2020年9月1日的文章<Compare Docker vs. Podman for container management> [1] Docker 和 ...
- 第6章 Python中的动态可执行方法目录
第6.1节 Python代码编译 第6.2节 Python特色的动态可执行方法简介 第6.3节 Python动态执行之动态编译的compile函数 第6.4节 Python动态表达式计算:eval函数 ...
- centos 7系统,解决python3.x 安装后使用yum不能安装的问题(错误:urlgrabber-ext-down | KeyboardInterrupt)
1.在安装python3.xx版本后,通过yum去安装软件会出现问题,目前我遇到的有2种问题 比如显示:urlgrabber-ext-down Downloading packages: File & ...
- MacOS上Parallels Desktop安装MacOSHighSierra
下载dmg文件 http://www.macoshome.com/macos/977.html 配置宿主机时间2015-10-27 23:25 为了防止"macOS未能安装在您的电脑上_安装 ...
- CF1000F One Occurrence
本题解用于记录一下一个优秀的东西--懒标记. 题解 可以很轻易的想到莫队的做法,但是题目让你输出的是满足条件的一个数,而不是满足条件的数的个数,似乎很难去 \(O(1)\) 转移.这个时候我们的懒标记 ...
- 动态规划之经典数学期望和概率DP
起因:在一场训练赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6829 题目大意:有三个人,他们分别有\(X,Y,Z\)块钱 ...
- socket ThreadingTCPServer学习笔记
文件上传#服务端 while True: conn,address = sk.accept() conn.sendall(bytes('欢迎你小sb',encoding='utf-8')) str_s ...
- gitignore文件
gitignore文件 python .gitignore .idea/ *.bak test* logs/ *.log # *.txt # Byte-compiled / optimized / D ...
- mybaties 使用注解注入动态sql (if-else)-转义字符
看到网上使用注解动态注入sql都是判断参数是否为空,我做项目的时候需要判断参数是否为字符串,需要对引号进行转义,所以把代码贴过来了. 注意:test表达式不能引用传入的参数,直接使用参数即可----- ...