当前位置: 首页 > 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.dtcms.com/a/282280.html

相关文章:

  • 数据结构--准备知识
  • 随机链表的复制数据结构oj题(CM11)
  • SOTI MobiControl vs EasyControl:MDM 解决方案对比 —— 理解差异与价值
  • batchnorm1d,layernorm,revin区别
  • 关于程序=数据结构+算法这句话最近的一些思考
  • 【数据结构】「栈」(顺序栈、共享栈、链栈)
  • iOS 抓包工具选择与配置指南 从零基础到高效调试的完整流程
  • 时序大模型为时序数据库带来的变革与机遇
  • Flutter 记录 使用ModalRoute获取参数
  • flutter app内跳转到其他安卓 app的方法
  • qt udp接收时 丢包
  • 安卓开发使用Android Studio配置flutter环境
  • 《Qt信号与槽机制》详解:从基础到实践
  • Flutter运行Android项目时显示java版本不兼容(Unsupported class file major version 65)的处理
  • 《Qt实战开发》:从计算器到音乐播放器的全栈实现指南
  • 7月16日作业
  • QOpenGLWidget自定义控件— 2D点云显示(支持平移、放缩、绘制网格)
  • 桥下的蓝色风景线
  • 数据库连接池调优以及常见问题
  • SSM框架学习——day3
  • 如何解决WordPress数据库表损坏导致的错误
  • Python 测试全景:单元测试、集成测试与端到端测试实战指南
  • 【收银系统源码】-适用于零售餐饮连锁多门店
  • Docker化Web服务部署全景指南:从基础服务器到企业级应用
  • VUE指令大全
  • 使用Node搭建一个直播服务器,实时直播当前桌面
  • WAMP允许远程访问
  • WAN技术
  • 基于 Python/PHP/Node.js 的淘宝 API 商品数据抓取开发教程
  • 高德mcp结合智能体生成旅游计划推荐