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

【初阶数据结构题目】14.随机链表的复制

随机链表的复制

点击链接做题

思路:

浅拷贝:拷贝值

深拷贝:拷贝空间

  1. 在原链表的基础上继续复制链表
  2. random指针
  3. 复制链表和原链表断开

代码:

/*** Definition for a Node.* struct Node {*     int val;*     struct Node *next;*     struct Node *random;* };*/
typedef struct Node Node;
Node* buyNode(int x){Node* newnode = (Node*)malloc(sizeof(Node));newnode->val = x;newnode->next = newnode->random = NULL;return newnode;
}
void AddNode(Node* phead){Node* pcur = phead;while(pcur){Node* Next = pcur->next;//创建新结点,尾插到pcurNode* newnode = buyNode(pcur->val);//newnode是复制结点pcur->next = newnode;newnode->next = Next;pcur = Next;}
}struct Node* copyRandomList(struct Node* head) {if(head == NULL){return NULL;}//1.原链表上复制结点AddNode(head);//2.置randomNode* pcur = head;while(pcur){Node* copy = pcur->next;if(pcur->random != NULL){copy->random = pcur->random->next;}pcur = copy->next;}//3.断开链表//在copy的链表里面设置两个指针:newHead,newTail位于拷贝链表的头//pcur往后挪两个到newHead->next,newTail挪到pcur->nextpcur = head;//让pcur先回到头节点Node* newHead, *newTail;newHead = newTail = pcur->next;while(pcur->next->next){//如果pcur->next->next为空就说明结束了pcur = pcur->next->next;newTail->next = pcur->next;//让newTail->next指向copy链表的后一个元素newTail = newTail->next;//把newTail移到copy链表的后一个元素的位置}return newHead;//返回新链表newHead到newTail
}

相关文章:

  • PHP最新可用获取QQ昵称API接口源码_非第三方
  • python语言day3 元组、字典、类型转换
  • Spring Boot相关知识
  • 自动化专业英语
  • 【Oracle EBS R12】第二章 P2P O2C cycle(英文版)
  • 案例开发-日程管理2第一期(超详细教程、配备图文和源代码注释,没学过也能看懂)
  • 基于腾讯云 AI 代码助手的Web端宝可梦图鉴实践记录
  • springboot的拦截器,监听器,过滤器,servlet的使用(三大组件)
  • Arduino教程(1)
  • Ubuntu配置carla docker环境
  • 从“抠图”到“抠视频”,Meta上新AI工具SAM 2。
  • Android14音频进阶之使能内核debugfs:Adsp输出日志(七十九)
  • 【学习笔记】A2X通信的协议(三)- A2X PC5通信(一)
  • 使用visual studio2019创建dll导出自定义类
  • C语言实现浮点数或整数转成字符串
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 2018一半小结一波
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Create React App 使用
  • Java 最常见的 200+ 面试题:面试必备
  • java取消线程实例
  • Linux中的硬链接与软链接
  • php的插入排序,通过双层for循环
  • python 装饰器(一)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 如何学习JavaEE,项目又该如何做?
  • 自动记录MySQL慢查询快照脚本
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 阿里云服务器如何修改远程端口?
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​第20课 在Android Native开发中加入新的C++类
  • # 数仓建模:如何构建主题宽表模型?
  • #VERDI# 关于如何查看FSM状态机的方法
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十八)SpringBoot之发送QQ邮件
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • ***测试-HTTP方法
  • .chm格式文件如何阅读
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET : 在VS2008中计算代码度量值
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET C# 使用 iText 生成PDF
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • //解决validator验证插件多个name相同只验证第一的问题
  • ??javascript里的变量问题
  • @31省区市高考时间表来了,祝考试成功
  • @javax.ws.rs Webservice注解