news 2026/4/16 13:06:17

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

作者头像

张小明

前端开发工程师

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/16 0:59:13

为什么你的Open-AutoGLM跑不起来?这5个部署陷阱你必须知道

第一章:为什么你的Open-AutoGLM跑不起来?在尝试部署 Open-AutoGLM 时,许多开发者遇到启动失败、依赖冲突或模型加载异常等问题。这些问题通常源于环境配置不当或对项目结构理解不足。以下是一些常见原因及其解决方案。环境依赖未正确安装 Ope…

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

软件缺失mfc110u.dll文件 找不到文件问题 下载修复方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/16 9:02:00

外网访问视频监控应用 iSpy Agent DVR

iSpy Agent DVR 是一款先进的数字视频录像机,能够高效运行提供实时视频流和录制功能。多运用在家庭监控、商业监控、远程监控等场景。本文将详细介绍如何在本地安装 iSpy Agent DVR 以及结合路由侠内网穿透实现外网访问。 第一步,本地部署 iSpy Agent D…

作者头像 李华
网站建设 2026/4/16 9:07:50

飞书文档批量导出终极方案:25分钟700份文档的自动化迁移

飞书文档批量导出终极方案:25分钟700份文档的自动化迁移 【免费下载链接】feishu-doc-export 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 还在为飞书文档迁移而头疼吗?feishu-doc-export 这款开源工具正是你需要的解决方案…

作者头像 李华
网站建设 2026/4/16 11:00:23

游戏速度掌控神器:OpenSpeedy的3大核心突破与实战应用

游戏速度掌控神器:OpenSpeedy的3大核心突破与实战应用 【免费下载链接】OpenSpeedy 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 你是否曾在游戏过程中渴望调整时间流逝的速度?无论是加速无聊的剧情对话,还是放慢紧张的…

作者头像 李华
网站建设 2026/4/16 11:06:32

Windows系统权限管理终极指南:TrustedInstaller工具完整解析

Windows系统权限管理终极指南:TrustedInstaller工具完整解析 【免费下载链接】LeanAndMean snippets for power users 项目地址: https://gitcode.com/gh_mirrors/le/LeanAndMean 在Windows系统管理中,TrustedInstaller权限工具为普通用户和系统管…

作者头像 李华