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

随机链表的复制数据结构oj题(力口138)

目录

问题描述

问题解读分析

解决代码


问题描述

问题解读分析

        这里我们要注意深拷贝和随机指针,首先就是深拷贝对应的浅拷贝是和原链表用一个结点,而深拷贝则对应的不和原链表一个结点,也就是说需要我们自己开辟空间去创建一个结点和原链表一模一样。而这里随机指针,是链表中一个指针,他随机但是又固定,固定是因为我们不需要随机给他寻找结点,而是实例给,但是随机又不能琢磨他只能在相对结点的右边,而还有相对于这个结点的左边。所以这里最为复杂的是该如何处理random指针,这里很难寻找到相对结点靠左的结点和random对应,我们这里选择在原链表基础上进行拷贝,通过原链表上的random指针的next(这个表示在原链表上的下一个指针,这个指针就是复制的链表)与我们拷贝对应。很抽象上图:

 最后一步就是将原链表和复制好的链表断开

解决代码

/*** Definition for a Node.* struct Node {*     int val;*     struct Node *next;*     struct Node *random;* };*/
struct Node* buyNode(int x)
{struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));if(newnode == NULL){perror("malloc");return NULL;}newnode->val = x;newnode->random= newnode->next = NULL;return newnode;
}void AddNode(struct Node* phead)
{struct Node* pcur = phead;while(pcur){struct Node* next = pcur->next;struct Node* newnode =buyNode(pcur->val);pcur->next = newnode;newnode->next = next;pcur = next;}
}
void setRandom(struct Node* phead)
{struct Node* pcur = phead;//根据newnode->random = pcur->random->nextwhile(pcur){struct Node* copy = pcur->next;if(pcur->random)//防止为空时解引用{copy->random = pcur->random->next;}pcur = copy->next;}
}
struct Node* copyRandomList(struct Node* head) {if(head == NULL)//防止没意义空指针的发生{return head;}//复制原链表AddNode(head);//复制randomsetRandom(head);//将原链表上的复制链表拆除struct Node* pcur = head;struct Node* copyHead=pcur->next;struct Node* copyTail = pcur->next;head->next = copyTail->next;//原链表链接while(pcur->next){//copyTail --- pcur->nextpcur = copyTail->next;copyTail->next = pcur->next;copyTail = copyTail->next;//pcur ----- pcur->nextpcur->next = copyTail->next;} return copyHead;
}

http://www.xdnf.cn/news/1132021.html

相关文章:

  • HTML进阶
  • Golang学习之常见开发陷阱完全手册
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘tkinter’问题
  • C#语法基础总结(超级全面)
  • 16路串口光纤通信FPGA项目实现指南 - 第二部分(下)
  • uniapp写好的弹窗组件
  • Maven入门指南:生命周期、阶段和执行顺序详解
  • Qt 将触摸事件转换为鼠标事件(Qt4和Qt5及以上版本)
  • webpack和vite对比
  • Django基础(三)———模板
  • 大语言模型(LLM)训练的教师强制(Teacher Forcing)方法
  • django在线音乐数据采集-22647
  • Anspire Open暑期上新季 - 第二弹Anspire Browser Agent,开启云端自动化新纪元
  • 【RTSP从零实践】13、TCP传输AAC格式RTP包(RTP_over_TCP)的RTSP服务器(附带源码)
  • Node.js Process Events 深入全面讲解
  • 【AI智能体】Dify 基于知识库搭建智能客服问答应用详解
  • 壹脉销客AI电子名片源码核心架构
  • SSM框架学习——day3
  • 【JVM】内存分配与回收原则
  • RAG优化秘籍:基于Tablestore的知识库答疑系统架构设计
  • 【前端】HTML语义标签的作用与实践
  • 产品经理笔试考试回忆集(2025湖南某国企)
  • 智慧公厕系统打造洁净、安全的公共空间
  • 搭建云途YTM32B1MD1芯片VSCODE+GCC + Nijia + Cmake+Jlink开发环境
  • WebStorm vs VSCode:前端圈的「豆腐脑甜咸之争」
  • vscode连接不上云服务解决
  • 万字长文解析 OneCode3.0 AI创新设计
  • [Linux入门] Linux 账号和权限管理入门:从基础到实践
  • 【Java入门到精通】(五)初识MySql数据库
  • beautiful-react-hooks库——入门实践常用hook详解