力扣138随机链表复制

【中等】力扣算法题解析LeetCode138:随机链表的复制 本文介绍了如何实现带随机指针的链表的深拷贝。通过三次遍历原链表,首先在每个节点后插入其拷贝,然后设置拷贝节点的随机指针,最后拆分链表恢复原结构并提取拷贝链表。该方法时间复杂度为O(n),空间复杂度为O(1)。代码使用Java实现,通过交错节点和拆分操作高效完成深拷贝,适用于处理复杂链表结构。 阅读详情

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。

例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。

返回复制链表的头节点。

用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:

  • val:一个表示 Node.val 的整数。
  • random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为  null 。

你的代码 只 接受原链表的头节点 head 作为传入参数。

题目理解(人话版):

你有一个长度为 n 的链表,每个节点除了有 val 和 next 指针外,还有一个 random 指针,指向链表中的任意一个节点,或者 null。

目标:
你需要创建一个全新的链表,这个新链表和原链表长得一模一样,也就是说:

  1. 节点值相同:新链表的每个节点的 val 要和原链表对应节点一样。
  2. next 关系相同:新链表的 next 指向要和原链表保持一致。
  3. random 关系相同:如果原链表中的某个 random 指向某个节点,新链表中对应的 random 也要指向新链表中的对应节点,不能指回原链表。
class Solution {
    public Node copyRandomList(Node head) {
        //新建hash表
        HashMap<Node, Node> nodeNodeHashMap = new HashMap<>();
        //保存新旧节点的投影关系
        Node cur = head;
        while (cur != null) {
            Node node = new Node(cur.val);
            nodeNodeHashMap.put(cur, node);
            cur = cur.next;
        }
        cur = head;
        while (cur != null) {
            //取出新节点
            Node newNode = nodeNodeHashMap.get(cur);
            //新节点指向next和random
            newNode.next  = nodeNodeHashMap.get(cur.next);
            newNode.random  = nodeNodeHashMap.get(cur.random);
            cur = cur.next;
        }
        return nodeNodeHashMap.get(head);
    }
}

别再只盯着时序了!聊聊SDC里那些容易被忽略的‘配角’命令:工作条件、线载模型与面积约束 本文深入探讨了SDC(设计约束)中常被忽视的关键命令,包括set_operating_conditions、set_wire_load_model和set_max_area。这些‘配角’命令在芯片设计中扮演着至关重要的角色,影响时序收敛、功耗和面积优化。文章通过实际案例和最佳实践,揭示了如何正确配置工作条件、选择线载模型以及动态调整面积约束,以提升设计质量和效率。 阅读详情

相关推荐

VisionMaster 4.2.0安装

按照顺序安装。

XuXing_java的专栏 3791

力扣LeetCode138. 复制带随机指针的链表 两种解法(C语言实现)

本题属于链表中较为综合的题目,考验做题者的思想以及用代码实现的能力,能够真正理解并做出此题需要对链表有相对熟练的掌握度。

干脆面la的博客 2736

MATLAB双目相机标定:从工具箱实战到参数精解

本文详细讲解了使用MATLAB进行双目相机标定的完整实战流程与参数精解。从拍摄合格的棋盘格图像、设置关键参数(如径向畸变系数),到分析重投影误差、优化结果并正确导出和使用内外参,提供了从操作到原理的全面指导,帮助读者为立体视觉应用奠定精准基础。

weixin_29041767的博客 259

138. 随机链表的复制【 力扣(LeetCode) 】

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

yyh520025的博客 1272

适配adv7280m相机到rk3588的安卓平台

Kernel-5.10/arch/arm64/configs/firefly_defconfig里面增加配置CONFIG_VIDEO_ADV7180=y。出现一次开不了机器的情况,接调试口发现,在set_fmt里面用s_ctrl对mipi的频率进行设置会出现异常。设备树修改kernel-5.10/arch/arm64/boot/dts/rockchip/13.dts。把MEDIA_ENT_F_ATV_DECODER改回MEDIA_ENT_F_CAM_SENSOR。第二次编译,仅仅刷新boot.img。

chenyq14的专栏 2449

ptrade从零开始学习量化交易第166期【ptrade量化策略研究参考--三个因子挖掘思路】

三个因子挖掘思路

GJ57017_wx的博客 1248

【LeetCode】138. 随机链表的复制

本文介绍了如何实现带有随机指针的链表的深拷贝。普通链表的复制相对简单,但随机指针的引入增加了复杂性,因为随机节点可能尚未创建。为了解决这个问题,提出了两种方法:第一种使用哈希表(HashMap)来存储原节点和复制节点的映射关系,分两步完成复制和随机指针的赋值;第二种方法通过原地操作,将复制节点插入原链表中,避免了额外的空间开销,最后再分离链表。两种方法的时间复杂度均为O(n),但第二种方法的空间复杂度为O(1)。

2301_78330892的博客 2078

浙大数值分析lab2

最可怕的一道题,题目是这样的 Root of a Polynomial A polynomial of degree nnn has the common form as p(x)=cnxn+cn−1xn−1+⋯+c1x+c0p(x)=c_n x^n + c_{n-1} x^{n-1} + \cdots + c_1 x + c_0p(x)=c​n​​x​n​​+c​n−1​​x​

yao_zou的博客 4797

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

题目描述(中等难度) 给一个链表,返回复制后的链表。链表节点相对于普通的多了一个 random 指针,会随机指向链表内的任意节点或者指向 null。 思路分析 这道题其实和 133 题 复制一个图很类似,这里的话就是要解决的问题就是,当更新当前节点的 random 指针的时候,如果 random 指向的是很后边的节点,但此时后边的节点还没有生成,那么我们该如何处理。 和 133 题 一样,我们...

wind_liang的博客 707

【数据分享】1985-2023 年中国 30m 生长季 NDVI 数据集:刘小平团队力作,Landsat 无缝融合无云产品

中山大学刘小平团队发布1985-2023年中国30m分辨率生长季Landsat NDVI数据集,解决了传统数据的三大痛点:无缝拼接、时间连续和质量可靠。该数据集基于5-9月生长季Landsat影像,通过云检测、多景融合等技术生成,已在GEE平台开放共享。其高分辨率、长时序特性为植被动态监测、LUCC研究等提供重要支撑,在农业、生态保护等领域具有广泛应用价值。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 1511

2026年03月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析

本文收录于《,订阅后可阅读专栏内所有文章。

人生就是一个不断学习的过程 238

力扣每日一道系列 --- LeetCode 138. 随机链表的复制

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

深入解析C/C++编程技巧,带你探索高效开发之路 1348

【时时三省】tessy 进入调试模式 教程

山不在高,有仙则名。水不在深,有龙则灵。----优快云 时时三省。

时时三省的博客 771

LeetCode —— 138. 随机链表的复制

LeetCode —— 138. 随机链表的复制

微笑,来自内心坚不可摧的自信。 886

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LeetCode 138.随机链表的复制

本文介绍了两种复制带随机指针链表的方法。重点推荐三步原地交织法,通过在原节点后插入拷贝节点(步骤1),利用相对位置关系设置random指针(步骤2),最后拆分恢复原链表并提取拷贝链(步骤3),实现O(n)时间和O(1)额外空间。文章提供了详细伪代码、C++实现和逐步解释,并对比了哈希映射法的优缺点。该方法高效且节省空间,特别适合处理大规模链表复制问题。注意事项包括处理空指针和正确拆分链表等边界情况。

计算机是信仰 918

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LeetCode138:随机链表的复制

leetCode-138

m0_61172147的博客 870

leetcode138.随机链表的复制

链表中的每个节点包含三个属性:val(节点的值),next(指向下一个节点的指针),以及random(一个随机指针,可以指向链表中的任意节点,或者为NULL)。我们的目标是创建一个新的链表,其中每个节点的值与原链表中相应节点的值相同,并且新链表中的next和random指针也正确地指向新链表中的节点。◦ 由于副本节点紧跟在原节点之后,原节点的random指针指向的节点的下一个节点就是副本节点的random指针应该指向的节点。◦ 遍历链表,将每个副本节点从原链表中分离出来,形成一个新的链表。

zzh_Zao的博客 904

【leetCode138】复制带随机指针的链表

leetCode[138]

日出等日落 477

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

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

qq_24472227的博客 163

力扣-138. 随机链表的复制

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

2301_79446157的博客 747

LeetCode138_随机链表的复制

链表的深拷贝

Haolin_Liu的博客 914

力扣-138.随机链表的复制

小结:如果遍历过程中遇到任何一个节点没有被创建,立刻递归地进行创建。小结:解法一的迭代写法,更加清晰易懂。

weixin_46878941的博客 1409

Leetcode 138. 复制带随机指针的链表 c语言

Leetcode 138. 复制带随机指针的链表 c语言 问题描述 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示: val:一个表示 Node.val 的整数。 random_index:随机指针指向...

ninotxdy的博客 291

力扣hot100:138. 随机链表的复制(技巧,数据结构)

这是一个经典的数据结构题,当做数据结构来学习。

m0_63997099的博客 2094

【LeetCode 热题 100】138. 随机链表的复制

Problem:题目:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1232

LeetCode138随机链表的复制

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

hezhenwu123的博客 766

浅谈力扣138题——随机链表的复制

可能有读者会有疑惑,那可不可以直接遍历原链表节点的val值,让原链表random指向的节点中的val值去匹配新链表节点random指针的指向的节点中val值。因为要返回的是全新的的链表,链表中的每个节点都是需要去申请来的,所以,原链表节点中的random指针指向的节点,与新链表的节点中的random指向的节点是毫无关联的。,唯一相同的只有他们的next指针都是指向下一个链表,所以新链表与原链表是毫无关联,不能单纯的通过原链表的random节点去匹配新链表的random节点。这里一定要理解,新链表的地址。

2301_80894970的博客 873
上一篇: 力扣21 合并两个有序链表
下一篇: Spring解决循环依赖问题
format_push
博客等级 码龄4年 104粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值