当前位置: 首页 > news >正文

随机链表的复制问题详解与代码实现

一、问题描述

138. 随机链表的复制 - 力扣(LeetCode)

题目要求对一个带有随机指针(random)的链表进行深拷贝。深拷贝的规则是:

  • 新建与原链表长度相同的全新节点,值与原节点对应相同。
  • 新节点的nextrandom指针需指向复制链表中的新节点,且指针指向关系与原链表完全一致,不能指向原链表节点。

输入为原链表头节点,输出为复制链表的头节点。示例输入输出如下:

  • 示例 1
    • 输入:[[7,null], [13,0], [11,4], [10,2], [1,0]]
    • 输出:[[7,null], [13,0], [11,4], [10,2],[1,0]]

二、代码实现与详解

(一)链表节点定义

struct Node {int val;struct Node *next;struct Node *random;
};

(二)在原链表每个节点后插入copy

Node* cur = head;while(cur){Node* copy = (Node*)malloc(sizeof(Node));if(copy == NULL){perror("malloc fail!");exit(1);}copy->val = cur->val;copy->next = cur->next;cur->next = copy;cur = copy->next;}

(三)控制random

 cur = head;while(cur){Node* copy = cur->next;if(cur->random == NULL){copy->random = NULL;}else{copy->random = cur->random->next;}cur = copy->next;}

(四)尾插连接copy,恢复原链表

Node* copyhead = NULL, *copytail = NULL;cur = head;while(cur){Node* copy = cur->next;Node* next = copy->next;if(copytail == NULL){copyhead = copytail = copy;}else{copytail->next = copy;copytail = copytail->next;}cur->next = next;cur = next;}return copyhead;

三、扩展思考

高效解法:哈希表映射法

核心思想

通过哈希表建立原节点与新节点的一一映射关系,确保在复制过程中能快速找到对应新节点,从而正确设置random指针。

步骤分解
  1. 第一次遍历:创建新节点并建立映射
    遍历原链表,为每个原节点创建对应的新节点,将原节点作为键、新节点作为值存入哈希表。

  2. 第二次遍历:设置新节点的nextrandom指针
    再次遍历原链表,通过哈希表获取当前原节点对应的新节点,以及原节点nextrandom指向的原节点对应的新节点,完成指针赋值。

四、总结

随机链表的复制问题核心在于处理random指针的跨节点引用,哈希表映射法通过建立原节点与新节点的直接关联,简洁高效地解决了这一问题。在实际开发中,需根据编程语言特性选择合适的数据结构,并注意内存管理(如 C 语言的动态内存分配与释放)。通过两次遍历和哈希表映射,可确保深拷贝的正确性和完整性。

相关文章:

  • 高等数学-极限
  • AutoMapper .net Framework 的 Model转换扩展方法
  • 小球弹弹弹
  • 数据库5——审计及触发器
  • Linux Docker安装【再探完美版教程】
  • sqlserver数据库查询执行慢的sql、查询隔离级别、设置快照模式、查询锁表进程、锁表sql、解锁等
  • [每日一题] 3362. 零数组变换 iii
  • Excel 密码忘记了?巧用PassFab for Excel 解密帮您找回数据!
  • 二十一、面向对象底层逻辑-scope作用域接口设计
  • deepseek调用
  • 内存管理子系统学习记录
  • 语义分割的image
  • Excel合并单元格后,如何自动批量生成序号列
  • 【人工智障生成日记1】从零开始训练本地小语言模型
  • Google Agent Development Kit与MCP初试
  • 西门子 S1500 博途软件舞台威亚 3D 控制方案
  • 边缘计算正在重新定义物联网的未来——你的设备还在“等云“吗?⚡
  • 游戏引擎学习第305天:在平台层中使用内存 Arena 的方法与思路
  • Php 箭头函数详解
  • Vue3实现轮播表(表格滚动)
  • 长白山网站学做管理平台/谷歌seo技巧
  • 如何防止网站被劫持/百度关键词排名手机
  • 写出网站开发的基本流程/竞价推广开户
  • 广州机械加工/建站 seo课程
  • wp可以做商城网站吗/近三天时政热点
  • 有人用dw做网站吗/西安seo排名