news 2026/6/25 16:47:55

力扣138随机链表的复制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣138随机链表的复制

给你一个长度为 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 作为传入参数。

题目很长,简单来说就是,链表的节点有一个next指针和random指针,next指针指向下一个节点,random节点指向其他节点。

首先是先复制一下链表,即每个原节点后面复制一个新节点,先操作next指针。
然后是把复制后的节点,操作一下random指针。
容易发现,新节点的random指向原节点random指向的next节点。
最后就是拆开新链表和原链表,因为题目要求需要保存原链表,所以需要用两个指针。

# Definition for a Node.classNode:def__init__(self,x,next=None,random=None):self.val=int(x)self.next=nextself.random=randomclassSolution(object):defcopyRandomList(self,head):""" :type head: Node :rtype: Node """ifnothead:returnNonep=headwhilep:new_node=Node(p.val)new_node.next=p.nextp.next=new_node p=new_node.nextp=headwhilep:ifp.random:p.next.random=p.random.nextp=p.next.nextdummy=Node(0)copy_cur=dummy# 负责构建复制链表cur=head# 负责遍历原链表whilecur:copy_node=cur.next# 先保存副本(比如 A')cur.next=copy_node.next# 恢复原链表(A -> B)copy_cur.next=copy_node# 把副本接到复制链表(dummy -> A')copy_cur=copy_node# 移动复制链表的指针cur=cur.next# 移动原链表的指针到 Breturndummy.next
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 16:44:51

C4D安装教程(附安装包)Cinema4D环境配置图文教程

文章目录前言Cinema4D2025下载(安装包获取)Cinema4D 2025 图文安装流程C4D 2025如何进行三维建模?Cinema4D操作步骤详解前言 Cinema4D C4D 2025 是MAXON公司推出的一款专业三维软件,集建模、动画、渲染功能于一体。无论是制作精良…

作者头像 李华
网站建设 2026/6/25 16:44:21

嵌入式Linux入门实战:基于Microchip Linux4SAM的完整开发指南

1. 从零开始:为什么选择Microchip Linux4SAM作为嵌入式Linux的起点?如果你刚刚接触嵌入式Linux,面对市面上琳琅满目的开发板(树莓派、BeagleBone、各种国产派)和复杂的BSP(板级支持包)&#xff…

作者头像 李华
网站建设 2026/6/25 16:43:24

大模型微调实战:从业务语义到参数空间的深度适配

1. 这不是调参,是给大模型办“入职手续”你手头有一台刚出厂的工业级数控机床,精度极高、算力惊人,但它的控制面板上全是英文菜单,G代码指令集默认指向汽车零部件加工模板,刀具路径预设的是曲轴铣削逻辑——而你真正要…

作者头像 李华
网站建设 2026/6/25 16:36:37

Maple安装教程(附安装包)Maple 2025 环境配置图文教程

文章目录软件介绍Maple 2025 下载与安装前准备Maple 2025 安装教程Maple 2025 可视化功能详解:绘制函数图像与三维图形软件介绍 Maple 是一款在数学计算领域应用广泛的计算机代数系统,擅长处理符号运算、数值分析以及数据可视化等任务。无论是从事数学研…

作者头像 李华
网站建设 2026/6/25 16:33:50

GitHub 狂揽 4万+ Star!这个项目直接让你省下 60–95% 的 Token

大家好,我是Java1234_小锋老师。 先说说:Token 到底烧在哪了? 如果你经常用 Claude Code、Cursor、Codex 这类 AI 编程助手,大概都有过这种体验: 搜一下代码,返回 100 条结果,一下子就是好几…

作者头像 李华