DeepSeek LeetCode 138.随机链表的复制 Kotlin实现

发布时间:2026/10/2 2:33:05

DeepSeek    LeetCode 138.随机链表的复制 Kotlin实现 下面是 LeetCode 138「随机链表的复制」的 Kotlin 实现。提供两种常见解法哈希表法简单直观和原地复制法O(1) 额外空间。节点类定义classNode(varval:Int){varnext:Node?nullvarrandom:Node?null}Kotlin 中 val 是关键字作为属性名需用反引号包裹与 LeetCode 默认定义一致。方法一哈希表推荐两轮遍历第一轮复制节点值并建立 原节点 - 新节点 映射第二轮设置新节点的 next 和 random。funcopyRandomList(head:Node?):Node?{if(headnull)returnnull// 1. 复制所有节点存入哈希表valmapHashMapNode,Node()varcurheadwhile(cur!null){map[cur]Node(cur.val)curcur.next}// 2. 连接 next 和 randomcurheadwhile(cur!null){valcopymap[cur]!!copy.nextcur.next?.let{map[it]}copy.randomcur.random?.let{map[it]}curcur.next}returnmap[head]}关键点· cur.next?.let { map[it] }安全调用若 next 非空则从哈希表取出对应新节点否则返回 null。· map[cur]!!确定当前节点已在第一轮被复制可断言非空。方法二原地复制O(1) 额外空间分三步在每个原节点后插入其复制节点利用原节点的 random 设置复制节点的 random将复制节点从原链表中拆分成新链表。funcopyRandomList(head:Node?):Node?{if(headnull)returnnull// 1. 复制节点并插入到原节点之后A - A - B - B - ...varcurheadwhile(cur!null){valcopyNode(cur.val)copy.nextcur.next cur.nextcopy curcopy.next}// 2. 设置复制节点的 randomcurheadwhile(cur!null){cur.next!!.randomcur.random?.next curcur.next?.next}// 3. 拆分两个链表valdummyNode(0)varcopyCur:Node?dummy curheadwhile(cur!null){valcopycur.next!!copyCur!!.nextcopy copyCurcopy cur.nextcopy.next curcur.next}returndummy.next}关键点· 第 2 步中 cur.random?.next 恰好是原 random 节点的复制节点。· 第 3 步拆分时copy.next 指向原链表的下一个原节点恢复原链表并构建新链表。复杂度分析方法 时间复杂度 空间复杂度哈希表 O(n) O(n)原地复制 O(n) O(1)建议面试中优先写哈希表法逻辑清晰不易出错若面试官要求优化空间再使用原地复制法。
延伸阅读

更多相关文章

2026/10/2 2:33:05

乘法器和除法器

引言本篇文章主要是关于《计算机组成原理》的乘法和除法运算的底层进行细节展开,相比于考研的内容,底层的实现可能会更加全面一些。乘法器两个数相乘我们在小学的时候就利用竖式进行计算,所以在我们无符号数的时候,我们的计算方式…

2026/10/2 2:33:05

从“警察抓小偷”到 6502 汇编:一段关于《Lode Runner》的回忆与追寻

一、那个叫“警察抓小偷”的游戏 上世纪八十年代,一台 Apple II 电脑前,一个初中生正对着屏幕上的像素小人发愁。他操控的小人在砖块迷宫里跑来跑去,身后有几个红色的小人紧追不舍。他需要收集完所有的金块,然后爬到顶部逃出去。但他总是失败,总是被抓到,然后从第一关重…

2026/10/2 2:28:05

加载失败诊断——从 errorString 到 Dependencies

前面讲了怎么写对。但凡上过线,你一定见过这种工单:“插件加载失败,打不开。” 五个字,没有任何信息。这一天的目标,是给你一套从浅到深的诊断流程,别再靠"我本地能跑啊"碰运气。 第一层:文件本身在不在、对不对 最蠢的错误最常见:路径错了、文件没部署、或…

2026/10/2 3:08:07

网络欺诈检测NLP实战:从TF-IDF到BERT微调的完整指南

简介:网络欺诈检测数据集提供8,564个中英双语欺诈案例,覆盖钓鱼、虚假招聘、冒充等类型,面向自然语言处理与网络安全研究者,用于训练和评估多类别欺诈文本识别模型,可帮助开发者快速构建和迭代检测方案。资源共4个JSON…

2026/10/2 3:08:07

PyTorch CNN遥感滑坡识别:小样本、多光谱与距离场监督

简介:本资源是一套基于PyTorch实现的遥感图像滑坡识别系统,面向地理信息科学、遥感技术及人工智能交叉领域的高校学生与科研初学者,解决地质灾害智能解译中的关键识别问题。压缩包共15个文件,含7个核心Python脚本(涵盖…

2026/10/2 3:08:07

报文修改实战指南:从Wireshark抓包到Linux重放的完整链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 3:08:07

Verilog仿真环境搭建:Icarus+GTKwave+VSCode全链路解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 3:03:07

机票数据分析与可视化大作业:从数据清洗到ECharts交互看板

简介:这是一份面向计算机相关专业学生与项目实战学习者的Python数据分析可视化大作业完整源码,聚焦机票价格数据分析与预测,并借助PyQt5实现可视化界面展示,适合正在准备课程设计、期末大作业或需要练手数据分析项目的人群。资源包…

2026/10/1 5:21:14

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/1 17:09:46

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 10:48:55

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/2 0:02:57

PWN入门:从栈溢出原理到ROP链实战

1. 这不是“学PWN”,是重新理解你每天敲的每一行C代码我第一次在CTF赛场上写出能控制程序流的exp时,手抖得连gdb的c命令都输错三次。那道题只有23行C代码,一个gets()调用,一个printf(),一个return——它甚至没开NX&…

2026/10/2 0:02:57

Windows下cudaMallocHost显存占用之谜:WDDM与TCC模式差异及优化方案

1. 一个反直觉的显存占用现象第一次在 Windows 上看到cudaMallocHost把显存吃掉的时候,我的反应是打开任务管理器反复确认了三遍。明明调用的是主机端锁页内存分配,按 CUDA 文档的说法,这块内存应该落在系统 RAM 里,跟 GPU 的显存…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑