深度复制链表——Leetcode系列(十三)

【数据结构】链表OJ特别篇 —— 面试情景带你深度剖析 环形链表系列问题 && 复制带随机指针的链表 模拟面试情景详解:环形链表系列问题、复制带随机指针的链表 阅读详情

Copy List with Random Pointer

 

A linked list is given such that each node contains an additional random pointer 

which could point to any node in the list or null.

Return a deep copy of the list.

My Answer

/**
 * Definition for singly-linked list with a random pointer.
 * class RandomListNode {
 *     int label;
 *     RandomListNode next, random;
 *     RandomListNode(int x) { this.label = x; }
 * };
 */
public class Solution {
    public RandomListNode copyRandomList(RandomListNode head) {
        if(head == null){
            return null;
        }
        RandomListNode pivot = head;
        int total = 0;
        while(pivot != null){
            total++;
            pivot = pivot.next;
        }
        RandomListNode[] array = new RandomListNode[total];
        pivot = head;
        array[0] = new RandomListNode(pivot.label);
        array[0].next = null;
        array[0].random = pivot.random;
        pivot = pivot.next;
        for(int i = 1; i < total; i++){
            array[i] = new RandomListNode(pivot.label);
            array[i - 1].next = array[i];
            array[i].next = null;
            array[i].random = pivot.random;
            pivot = pivot.next;
        }
        Map<RandomListNode,Integer> map = new HashMap<RandomListNode,Integer>();
        pivot = head;
        int index = 0;
        while(pivot != null){
            map.put(pivot,index);
            pivot = pivot.next;
            index++;
        }
        
        pivot = head;
        for(int i = 0; i < total; i++){
            if(pivot.random != null){
                array[i].random = array[map.get(pivot.random)];
            }
            pivot = pivot.next;
        }
        return array[0];
    }
}


题目来源:https://oj.leetcode.com/problems/copy-list-with-random-pointer/

Windows 11下manage-bde命令实战:BitLocker锁了别慌,手把手教你用命令行找回数据 本文详细介绍了在Windows 11系统下使用manage-bde命令解锁BitLocker加密驱动器的实战方法。通过命令行诊断、恢复密钥获取、解锁流程演示及高级故障排除,帮助用户在系统锁定后快速找回数据,特别适合IT技术人员和遇到紧急情况的用户。 阅读详情

相关推荐

从‘能看’到‘好看’:用Seaborn调色板让你的热力图在PPT和论文中脱颖而出

本文探讨如何利用Seaborn调色板提升热力图在PPT和论文中的视觉效果,从视觉心理学和场景适配角度出发,提供学术与商业场景下的配色方案和实战代码。通过优化色彩选择,使数据可视化更具专业性和吸引力,帮助读者快速理解关键信息。

weixin_30755393的博客 245

力扣138. 复制带随机指针的链表

题目链接 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。 例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。

weixin_43795939的博客 991

软件工程实验报告--用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

m0_73814332的博客 4162

链表深拷贝[随机链表的复制]

本文介绍了链表深拷贝问题的两种解法:原地插入法和哈希表法。深拷贝要求完全复制链表结构,包括next和random指针关系,确保新旧链表独立。 原地插入法通过将拷贝节点插入原节点后,分三步完成:1)复制节点并插入原链表;2)设置random指针;3)拆分新旧链表。该方法空间复杂度O(1),思路巧妙。 哈希表法使用哈希表存储新旧节点映射关系,分两步:1)创建所有新节点并记录映射;2)根据映射设置指针。虽然空间复杂度O(n),但思路直观,是处理复杂指针关系的通用方法。

X_HJJ的博客 1049

【ARM Trace32(劳特巴赫) 使用介绍 10 -- Trace32 scan dump 详细介绍】

将图 1-2 中扫描单元按照扫描移位模式连接起来,就构成了扫描测试中的基本结构,这里介绍下全扫描。全扫描就是多个扫描单元相连接,上一单元的扫描输出,连接到目前单元的扫描输入,目前单元的扫描输出连接到下一单元的扫描输入,以此类推,构成一条移位寄存器链,如图1-3 所示:图 1-3 全扫描这样的扫描结构,可通过一个串行输入端,将期望的数据存入移位寄存器链并观察运行结果。

CodingCos的博客 2033

Error: Flash Download failed - Target DLL has been cancelled

由于换了新电脑,keil重装了下,然而之前的MCU的支持包没有安装,以及一些其他的问题,导致可以编译但是不能将程序烧录到单片机中。现整理一下解决思路: 1、将支持包下载并添加: 找到你需要用的MCU的具体型号: 例如: 点击网址,下载安装包,或者在csdn等其他网址下载安装包,将下载好的pack包放到keil5的安装目录下的.Download中: 点击file中的import,将路径选择到.........

hanhan的博客 5万+

复制带随机指针的链表又名深度拷贝

复制带随机指针的链表又名深度拷贝

2201_75352618的博客 317

ROS2 - 乐动激光雷达 LD06

STL-06P 主要由激光测距核心,无线传电单元,无线通讯单元,角度测量单元、电机驱动单元和机械外壳组成。STL-06P 测距核心采用 DTOF 技术,可进行每秒 5000 次的测距。每次测距时,雷达发射出红外激光,激光遇到目标物体后被反射到单光子接收单元。

机器人控制与仿真应用 3485

深度拷贝一个链表

要求: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。返回一个该链表的深度拷贝。 思路: 1、遍历该链表,复制每一个节点,插入到当前节点的后面.形成如下链表.1->1'->2->2'.... 2、将每个拷贝节点的随机指针域,指向原节点(即拷贝节点的上一个节点)的随即指针域指向(注意随机指针域可能为空)的下一个节点...

weixin_34218579的博客 195

API Streaming Failed 400 <400>InternalError.Algo.InvalidParameter input content must be a string解决方案

本文主要介绍了API Streaming Failed 400 <400> InternalError.Algo.InvalidParameter input content must be a string解决方案,希望能对使用vscode中cline的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 3万+

华为交换机系统软件升级和安全漏洞修复教程

在华为交换机国网可以查询到华为交换机官方电话:400-822-9999,通过下命令查询出需要升级的交换机软件版本和补丁版本号发给华为,获取新的升级系统软件和补丁以及升级教程。下面是我升级华为交换机总结的教程,作为参考。...

星如雨落 2965

链表深度复制

题目:请实现函数,复制一个复杂链表。在复杂链表中,每个结点除了有一个next指针指向下一个结点外,还有一个random指向链表中的任意结点或者NULL 唯一难度在于无法一次复制成功, 因为当复制p时, p->random无法赋值, 因为还未创建出来, 所以做如下图操作 第一轮做出如上图的链表 第二轮指定复制节点的random 第三轮抽取出结果即可 #include<iostream...

Light 377

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【数据结构与算法】leetcode随机链表的复制 深度讲解

leetcode随机链表的复制 目录 leetcode随机链表的复制 一、题目解读 二、解题思路 三种猜想思路 思路一 思路二 思路三 真正的解题思路 1.构建重组链表 2.寻找复制链表的随机指针并赋值 3.复原随机链表和复制链表

重铸自身根基的博客 1381

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Leetcode】链表的深度拷贝——复制带随机指针的链表

链表的深度拷贝

诺诺的包包 2088

力扣138:随机链表的复制

新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。需要先创建一个新的头指针和尾指针,当尾指针为空时,也就是说新链表里面还没有节点时,此时插入的节点就是这个新链表的头节点。如果不指向任何节点,则为 null。,第二个节点13的随机指针指向的是第一个节点7,第三个节点11的随机指针指向的是第五个节点1…

Giggins GaoBlog 1353

每日一题(随机链表的复制)

给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的。深拷贝应该正好由n个节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。。例如,如果原链表中有X和Y两个节点,其中。那么在复制链表中对应的两个节点x和y,同样有。返回复制链表的头节点。用一个由n个节点组成的链表来表示输入/输出中的链表。

2301_80344616的博客 924

LeetCode138随机链表的复制

一般也有可能会这样想,先不管random指针,直接复制整个链表的val, 每个结点的random先让它为null,然后因为要处理random,就需要通过复制的结点找到原来对应的结点,然后找到原来的random结点,最后又要通过该random结点找到复制的random结点。前面复制链表是第一次遍历,第二次遍历,我们需要填充原节点到复制节点的映射以及复制节点到原节点的映射,第三次遍历,则是赋值复制链表的random指针,这里就不再写这个代码了。第一次遍历先复制各个结点的值,将复制结点接在原节点后面。

hezhenwu123的博客 766

力扣138.随机链表的复制

遍历该链表的过程中,我们检查「当前节点的后继节点」和「当前节点的随机指针指向的节点」的创建情况。注意一个节点可能被多个其他节点指向,因此我们可能递归地多次尝试拷贝某个节点,为了防止重复拷贝,我们需要首先检查当前节点是否被拷贝过,如果已经拷贝过,我们可以直接从哈希表中取出拷贝后的节点的指针并返回即可。对于当前节点,我们首先要进行拷贝,然后我们进行「当前节点的后继节点」和「当前节点的随机指针指向的节点」拷贝,拷贝完成后将创建的新节点的指针返回,即可完成当前节点的两指针的赋值。返回复制链表的头节点。

coldmood77的博客 1931

【LeetCode刷题记录】138. 随机链表的复制

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y。

C_greenbird的博客 1313

【LeetCode刷题日志】138.随机链表的复制

当我们完成了拷贝节点的随机指针的赋值,我们只需要将这个链表按照原节点与拷贝节点的种类进行拆分即可,只需要遍历一次。这样,我们可以直接找到每一个拷贝节点S′的随机指针应当指向的节点,即为其原节点S的随机指针指向的节点T的后继节点T′。我们首先将该链表中每一个节点拆分为两个相连的节点,例如对于链表A→B→C,我们可以将其拆分为 A→A′→B→B′→C→C′。指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。

m0_68662723的博客 1465

一道题掌握链表!leetcode随机链表的复制【深度解析】

题目要求我们复制一个随机链表,每个节点除了指向下一个节点的指针,还有一个随机指针指向任意位置。而难点就在这里,复制的随机指针应该指向自己复制的新链表而不能指向原随机链表。

ming_0128的博客 409

LeetCode 138.复制带随机指针的链表

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。

weixin_74937672的博客 2387

python 带随机指针的链表深度复制_LeetCode138. 复制带随机指针的链表

题解第一步:复制结点,复制的结点放在待复制的结点后,依然组成一个单链表第二步:串接随机指针第三步:将原单链表与复制链表拆开代码class Solution {public RandomListNode copyRandomList(RandomListNode head) {if (head == null) {return null;}copyNode(head);linkRandomPoint...

weixin_32394247的博客 201

LeetCode每日一练 —— 138. 复制带随机指针的链表

leetcode 138. 复制带随机指针的链表

Edison's 小宇宙 1万+

LeetCode:复杂链表的复制

题目描述: 请实现 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: 输入:

qq_28149517的博客 239

LeetCode 热题 100 - 链表 - 随机链表的复制 - javascript

​给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。

weixin_47218107的博客 670
上一篇: 判断字符串是否能分割成字典中的单词(二)——Leetcode系列(十二)
下一篇: 查找数组中只出现一次的数(一)——Leetcode系列(十四)
Hooting
博客等级 码龄17年 11粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值