
「复制带随机指针的链表」的一个很巧妙解法
逐个复制节点:从原链表的第一个节点开始,逐个复制每个节点到新链表中。 复制指针:在复制每个新节点时,将其随机指针指向原节点的随机指针所指的节点;同时,让新链表当前节点的后继节点指向原节点的后继节点。 断开链表:完成复制后,断开新链表与原链表之间的连接,确保它们是独立的链表。 复制节点:遍历原链表,逐个复制每个节点到新链表中。新节点的随机指针和后继节点均指向原节点的相应节点。 处理随机指针:在复制完成后,调整新链表中每个节点的随机指针,确保其指向原链表中随机指针的目标节点。 断开链表:通过调整每个节点的后继指针,断开新链表与原链表之间的连接,形成独立的新链表。
发布日期:2021-05-19 23:03:45
浏览次数:16
分类:精选文章
本文共 1258 字,大约阅读时间需要 4 分钟。
给定一个带有随机指针的链表节点,目标是对链表进行深拷贝。以下是详细的解决方案:
问题分析
每个链表节点包含一个额外的随机指针,该指针可以指向链表中的任意节点或空节点。深拷贝的要求是创建一个独立的链表,使得每个新节点的数据和指针均独立于原链表。
方法思路
解决代码
class Solution {public: RandomListNode* copyRandomList(RandomListNode* head) { if (!head) return NULL; RandomListNode* cur = head; // 复制节点,处理next指针 while (cur) { RandomListNode* node = new RandomListNode(cur->label); node->next = cur->next; cur->next = node; cur = node->next; } // 处理random指针 cur = head; while (cur) { if (cur->random) { cur->next->random = cur->random->next; } cur = cur->next->next; } // 断开链表 cur = head; while (cur) { cur->next = cur->next->next; cur = cur->next; } // 返回新链表的第2个节点 return head ? head->next : NULL; }};
代码解释
这个方法避免了额外空间的占用,直接在线处理,展示了高效和巧妙的解法。
发表评论
最新留言
不错!
[***.144.177.141]2025年05月05日 06时20分07秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
springboot security 基于redis的session共享(7)
2019-03-17
vue 权限管理 菜单按钮权限控制(7)
2019-03-17
vue 权限管理 主题切换(8)
2019-03-17
Qt 在Excel文件中Chart绘图
2019-03-17
U3D资源加载
2019-03-17
01-webpack5理解及配置
2019-03-17
JavaScript作用域和作用域链
2019-03-17
webpack的安装和使用
2019-03-17
Vue.js学习-15-v-for循环数组内容
2019-03-17
Linux——系统安全及应用(开关机安全机制、系统弱口令检测、NMAP)
2019-03-17
kafka超时错误或者发送消息失败等错误,排错方式
2019-03-17
Python3 排序函数问题
2019-03-17
Windows下配置单机Hadoop环境 pyspark
2019-03-17
git教程之远程仓库
2019-03-17
Vue路由跳转如何传递一个对象过去?
2019-03-17
sockjs-node/info?t=1462183700002 报错解决方案
2019-03-17
FI 替代相关 OSS Note 要点记录
2019-03-17
蓝桥杯---试题 算法提高 欧拉函数(数学)
2019-03-17