news 2026/5/5 15:25:27

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

作者头像

张小明

前端开发工程师

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/5/3 13:40:46

MusicFree插件完全指南:打造你的专属音乐世界

在数字音乐时代,我们的音乐资源往往分散在多个平台:B站音频、国际视频平台音乐、个人云存储等。MusicFree插件系统将这些碎片化的资源整合到一个统一的播放界面中,让你享受前所未有的音乐体验自由度。 【免费下载链接】MusicFreePlugins Musi…

作者头像 李华
网站建设 2026/5/1 4:45:34

游戏加速神器OpenSpeedy:解锁帧率限制的终极指南

还在为游戏卡顿而烦恼吗?想要体验丝滑流畅的游戏画面吗?OpenSpeedy这款开源免费的游戏加速工具,就是为你量身定制的解决方案!它能帮你突破游戏原有的帧率限制,让每一场游戏都变得畅快淋漓。 【免费下载链接】OpenSpeed…

作者头像 李华
网站建设 2026/5/3 10:03:24

FreeMove 终极指南:快速安全地移动程序目录释放系统空间

FreeMove 终极指南:快速安全地移动程序目录释放系统空间 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove FreeMove 是一款专业的文件迁移工具,专…

作者头像 李华
网站建设 2026/5/2 7:19:10

洛雪音乐六音音源终极修复方案:3步快速恢复完整音乐功能

洛雪音乐六音音源终极修复方案:3步快速恢复完整音乐功能 【免费下载链接】New_lxmusic_source 六音音源修复版 项目地址: https://gitcode.com/gh_mirrors/ne/New_lxmusic_source 还在为洛雪音乐升级后六音音源失效而困扰吗?这个完整的六音音源修…

作者头像 李华
网站建设 2026/5/1 3:51:00

你的音乐被锁住了吗?qmcdump让QQ音乐文件重获自由

你是否曾经满怀期待地将精心下载的QQ音乐文件拷贝到其他设备,却惊讶地发现它们变成了"哑巴"?那些后缀为.qmcflac、.qmc0、.qmc3的文件,就像被施了魔法的宝箱,明明装着美妙的音乐,却无法在其他播放器中开启。…

作者头像 李华
网站建设 2026/5/1 3:49:26

【大模型落地必看】Open-AutoGLM集群部署:高可用架构设计与性能调优

第一章:Open-AutoGLM集群部署概述Open-AutoGLM 是一个面向大规模语言模型训练与推理的分布式计算框架,专为异构硬件环境下的高效协同设计。其核心优势在于支持动态资源调度、自动负载均衡以及跨节点通信优化,适用于科研机构与企业级 AI 平台的…

作者头像 李华