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

LeetCode-随机链表的复制

. - 力扣(LeetCode)

 本题思路:

首先注意到随机链表含有random的指针,这个random指针指向是随机的;先一个一个节点的拷贝,并且把拷贝的节点放在拷贝对象的后面,再让拷贝节点的next指向原链表拷贝对象的下一个节点,这样做的目的是实现拷贝节点的插入,即拷贝好的节点都放在原链表两个节点之间;

实现完拷贝节点的插入是为了实现拷贝节点random的指向;如果原链表拷贝对象的random指向为NULL,那么拷贝节点的random指向也置为NULL;若是拷贝对象的random指向不为NULL,那么就让拷贝节点的random指向拷贝对象的random的next,解释为什么要这样:假设现在要实现这个链表中一个拷贝节点的random指向,已知其他拷贝对象的next指向的就是拷贝节点;要实现random指向的这一个节点要找到和它拷贝对象一样的random指向,如何找到?只需要让这个拷贝节点的random指向它自己拷贝对象的random的next,这个被指向的拷贝节点就是原链表中这个要实现random指向的拷贝节点的拷贝对象的的random的next指向的拷贝节点;

最后再进行尾插操作,让拷贝节点形成一条新的链表;并且还原原链表;

/*** Definition for a Node.* struct Node {*     int val;*     struct Node *next;*     struct Node *random;* };*/
typedef struct Node Node;
struct Node* copyRandomList(struct Node* head) {Node* cur=head;Node* next=NULL;Node* copy=NULL;while(cur){next=cur->next;copy=(Node*)malloc(sizeof(Node));copy->next=next;copy->val=cur->val;cur->next=copy;cur=next;}//拷贝节点的插入cur=head;while(cur){copy=cur->next;next=copy->next;if(cur->random==NULL){copy->random=NULL;}else{copy->random=cur->random->next;}cur=next;}拷贝节点random的指向实现cur=head;Node* copyhead,*copytail;copyhead=copytail=(Node*)malloc(sizeof(Node));copyhead->val=-1;copyhead->next=copyhead->random=NULL;while(cur){copy=cur->next;next=copy->next;copytail->next=copy;copytail=copytail->next;cur->next=next;cur=next;}//拷贝节点尾插变成新的要求的链表;还原成原链表Node* rsl=copyhead->next;free(copyhead);copyhead=NULL;return rsl;}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • gin框架 POST 请求参数绑定 JSON数据ShouldBind 使用注意事项 - 结构体必须定义json标签
  • 使用llama-cpp-python制作api接口
  • 力扣第十五题——三数之和
  • 基于秒杀系统的企业开发设计思考
  • LFU算法实现笔记
  • 【postgresql】pg_dump备份数据库
  • 六爻排盘 api数据接口
  • mmc-utils 的 MMC 测试工具
  • nng协议nni_posix_resolv_sysinit()系统初始化
  • iOS ------ ARC的工作原理
  • Android获取当前屏幕显示的是哪个activity
  • 访问控制系列
  • 【RPC注册发现框架实战】一个简易的RPC注册发现框架
  • Vue.js:如何区分页面关闭和刷新?深入解析与实战
  • mysql命令练习
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Computed property XXX was assigned to but it has no setter
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Iterator 和 for...of 循环
  • JavaScript服务器推送技术之 WebSocket
  • js写一个简单的选项卡
  • node 版本过低
  • SpriteKit 技巧之添加背景图片
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 从输入URL到页面加载发生了什么
  • 电商搜索引擎的架构设计和性能优化
  • 回顾2016
  • 讲清楚之javascript作用域
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 爬虫模拟登陆 SegmentFault
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端设计模式
  • 一道面试题引发的“血案”
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • Spring第一个helloWorld
  • zabbix3.2监控linux磁盘IO
  • 说说我为什么看好Spring Cloud Alibaba
  • #在 README.md 中生成项目目录结构
  • (06)Hive——正则表达式
  • (145)光线追踪距离场柔和阴影
  • (175)FPGA门控时钟技术
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (9)目标检测_SSD的原理
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Forward) Music Player: From UI Proposal to Code
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (力扣)1314.矩阵区域和
  • (四)stm32之通信协议
  • (四)库存超卖案例实战——优化redis分布式锁
  • (原创)可支持最大高度的NestedScrollView
  • (转)ObjectiveC 深浅拷贝学习
  • (转)scrum常见工具列表
  • .NET 4.0中的泛型协变和反变