news 2026/4/23 11:05:53

链表掌握九成?这题能独立完成吗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
链表掌握九成?这题能独立完成吗

若能独立完成本题的思路构建与代码实现,说明你对链表的理解已掌握九成。建议先自行尝试解题(题目链接见下图),以检验掌握程度。若遇到困难,可参考本文提供的详细思路解析和代码实现(采用C语言)。

随机链表的复制

链接:https://leetcode.cn/problems/copy-list-with-random-pointer

本题难点在于如何拷贝randon,怎样才能找到拷贝链表和原链表的关联。

解题思路:

此题可以分三步进行:

1.拷贝链表的每一个节点,拷贝的节点先链接到被拷贝节点的后面

节点复制阶段遍历原始链表,为每个节点创建拷贝节点,将拷贝节点插入到原始节点之后。例如原始链表为A->B->C,复制后变为A->A'->B->B'->C->C'。这样我们就将拷贝链表和原链表关联起来,对我们后续找链表里的数据至关重要。

2.复制随机指针的链接:拷贝节点的随机指针指向被拷贝节点随机指针的下一个位置

随机指针设置阶段再次遍历链表,处理每个拷贝节点的random指针。由于第一步我们将拷贝节点和原连接起来,变成A->A'->B->B'->C->C'。由图我们可以看出节点原始节点的random指针指向的节点的下一个节点即为拷贝节点应该指向的位置。若原始节点的random为NULL,拷贝节点的random也设为NULL。

3.拆解链表,把拷贝的链表从原链表中拆解出来

链表拆分阶段创建拷贝链表的头指针和尾指针,通过遍历将拷贝节点从交错链表中提取出来,同时恢复原始链表的连接关系。每次处理将拷贝节点接入拷贝链表尾部,并移动原始链表的当前指针。最终返回副本链表的头节点。

该算法时间复杂度为O(n),空间复杂度为O(1)(不计入返回的深拷贝链表所需空间),通过巧妙地利用节点交错排列避免了哈希表的额外空间开销。

代码实现:

struct Node* copyRandomList(struct Node* head) { /* 解题步骤: 1. 为每个节点创建副本,插入到原节点之后 2. 设置副本节点的random指针 3. 分离原链表和副本链表 */ struct Node* cur = head; // 第一步:创建并插入副本节点 while(cur) { struct Node* copy = (struct Node*)malloc(sizeof(struct Node)); copy->val = cur->val; copy->next = cur->next; cur->next = copy; cur = copy->next; } // 第二步:设置副本节点的random指针 cur = head; while(cur) { struct Node* copy = cur->next; copy->random = cur->random ? cur->random->next : NULL; cur = copy->next; } // 第三步:分离两个链表 cur = head; struct Node* copyhead = NULL, *copytail = NULL; while(cur) { struct Node* copy = cur->next; cur->next = copy->next; if(!copytail) { copyhead = copytail = copy; } else { copytail->next = copy; copytail = copy; } cur = cur->next; } return copyhead; }

如果对你有帮助别忘了一键三连,制作不易谢谢支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 20:53:20

IwaraDownloadTool终极使用指南:如何快速下载高清视频

IwaraDownloadTool终极使用指南:如何快速下载高清视频 【免费下载链接】IwaraDownloadTool Iwara 下载工具 | Iwara Downloader 项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool IwaraDownloadTool是一款专为Iwara视频平台设计的开源下载工具…

作者头像 李华
网站建设 2026/4/23 9:52:13

颠覆性数据可视化神器:Plotly完整实战指南

颠覆性数据可视化神器:Plotly完整实战指南 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 在当今数据驱动的时代,如何将枯燥…

作者头像 李华
网站建设 2026/4/20 13:49:11

AI绘画插件本地部署:从入门到精通的完整解决方案

AI绘画插件本地部署:从入门到精通的完整解决方案 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项目地址: https://gitcode.com/…

作者头像 李华
网站建设 2026/4/22 4:10:02

安卓设备上的代码编辑革命:VS Code本地化部署深度解析

安卓设备上的代码编辑革命:VS Code本地化部署深度解析 【免费下载链接】vscode_for_android 安卓本地使用vs code编辑器实现方案 项目地址: https://gitcode.com/gh_mirrors/vs/vscode_for_android 你是否曾在通勤路上突发编程灵感,却因手边没有合…

作者头像 李华
网站建设 2026/4/22 2:51:15

FreeMove终极教程:3分钟快速释放C盘空间的免费神器

FreeMove终极教程:3分钟快速释放C盘空间的免费神器 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 还在为C盘爆满而烦恼吗?FreeMove这款强大的…

作者头像 李华
网站建设 2026/4/22 17:18:11

手把手教你部署Open-AutoGLM,快速搭建企业级AI推理平台

第一章:Open-AutoGLM部署概述Open-AutoGLM 是一个开源的自动化通用语言模型部署框架,专为简化大语言模型(LLM)在生产环境中的集成与运维而设计。它支持多种后端推理引擎、模型格式及云原生部署方式,适用于从本地开发到…

作者头像 李华