面试题35. 复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
示例 1:
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
示例 2:
输入:head = [[1,1],[2,1]]
输出:[[1,1],[2,1]]
示例 3:
输入:head = [[3,null],[3,0],[3,null]]
输出:[[3,null],[3,0],[3,null]]
示例 4:
输入:head = []
输出:[]
解释:给定的链表为空(空指针),因此返回 null。
提示:
-10000 <= Node.val <= 10000
Node.random 为空(null)或指向链表中的节点。
节点数目不超过 1000 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:一种是用HashMap存,键存原链表,值存新链表,然后再跑原链表一遍,把random加上。第二种是将原链表的每个节点后面加一个复制的节点,然后把random加上,再把两根链表拆开。最开始的时候我以为复制出来就行了,最后发现原链表也得不动,这块耗时较长,我还以为我的代码错了呢。
/*
// Definition for a Node.
class Node {
int val;
Node next;
Node random;
public Node(int val) {this.val = val;this.next = null;this.random = null;
}
}
*/
class Solution {
public Node copyRandomList(Node head) {
if(head == null){
return null;
}
//将链表复制一份
for(Node p = head, newNode = null;p != null;p = p.next.next){
newNode = new Node(p.val);
newNode.next = p.next;
p.next = newNode;
}
//把随机指针也拉上
for(Node p = head;p != null;p = p.next.next){
if(p.random != null){
p.next.random = p.random.next;
}
}
//拆分链表,原链表还不能变,一开始一直是直接拉出复制链来发现过不老
return split(head);
}
public static Node split(Node head){Node h = head.next;Node p = head;Node q = head.next;while(p != null && q != null){p.next = q.next;p = q;q = q.next;}return h;
}
}
面试题35. 复杂链表的复制相关推荐
- 剑指offer:面试题35. 复杂链表的复制
题目:复杂链表的复制 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 ...
- 剑指offer面试题35. 复杂链表的复制(DFS)(深拷贝)
题目描述 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null. ...
- 【LeetCode】剑指 Offer 35. 复杂链表的复制
[LeetCode]剑指 Offer 35. 复杂链表的复制 文章目录 [LeetCode]剑指 Offer 35. 复杂链表的复制 package offer;import java.util.Ar ...
- 剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制 题目 题目链接 解题思路 题目理解 解题思路 具体代码 题目 题目链接 https://leetcode-cn.com/problems/fu-za-lian ...
- 【三次优化】剑指 Offer 35. 复杂链表的复制
立志用最少代码做最高效的表达 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意 ...
- 剑指offer——35复杂链表的复制
这题很是巧妙. 突破了常规思维. 竟然可以把传入进来的链表和复制的链表链在一起.然后再算出slibling指针.最后在分离. 直接把空间复杂度变为O(1)了. 很巧妙,很实用. 题目: 请实现函数Co ...
- 剑指 Offer 35. 复杂链表的复制(哈希/衍生拆分图解)
题目描述 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null. ...
- LeetCode笔记】剑指 Offer 35. 复杂链表的复制(Java、哈希表、原地算法)
文章目录 题目描述 思路 && 代码 1. 哈希表法 2. 原地算法 二刷 题目描述 主要有两个考虑点: 不能改变原链表 新链表赋予 next.random 时,复制结点不一定存在 思 ...
- 35. 复杂链表的复制
链接 https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/ 难度: #中等 题目 请实现 copyRandomList 函数 ...
最新文章
- C#程序调用外部程序
- 牛客假日团队赛5 K	金币馅饼 (DP 基础题)
- 高考还没结束,这份试卷已经流出,你能拿多少分?
- python图片矢量化_图像处理tas的Python矢量化
- 树莓派4B安装Ubuntu20.04
- SQL Server 2008支持将数据导出为脚本
- 冒泡排序c语言(包含完整代码)
- 21天学通java web 第二版pdf_21天学通JAVA WEB开发 pdf完全版_IT教程网
- linux64 gaussian 16,Gaussian 16 运行与硬件配置参考
- word转简洁html工具,Convert Word to HTML(Word转HTML工具)
- 大数据入门教程系列之Hbase安装(伪分布式)
- C++ 分配器 allocator
- python while循环详解
- 构建具有时间依存协变量的Elastic-net Cox模型
- GPS北斗卫星时钟同步系统的原理和技术
- 【科普】如何评价供应商的MES系统
- 在windows终端中进行复制粘贴的方法
- antd table合并行或者列(动态添加合并行、列)
- 机器学习在神策数据的应用
- 年度结转的时候,弹出“系统所用科目被删除,不能结转上年度数据”