LeetCode:138. 随机链表的复制之如何有效copy

 自己复制的话,很容易写出来一个时间复杂度O(n ^ 2) 空O(n)的做法

我们可以参考基因的复制,

目录

题目:

实现思路(基因复制式的copy):

官方快慢指针解法:时O(n)空O(1)

 博主的 时O(n ^ 2) 空O(n)刺眼代码:

每日表情包:


题目:

快慢指针实现思路(基因复制式的copy):

                1,创建结点:我们插入式的给每个结点的后面创建我们的新链表的结点(后续会把创建的结点抠出来)

                2,赋值:我们根据(模仿)创建的新结点的复制对象,易知我们copy的新结点的。random指针指向的就是复制对象的random指针所指向的结点的下一个结点。

                3,把copy的结点抠出来,

(细节,注意random可能指向NULL),如果看不懂可以去看视频力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

官方快慢指针解法:时O(n)空O(1)

struct Node* copyRandomList(struct Node* head) {if (head == NULL) {return NULL;}for (struct Node* node = head; node != NULL; node = node->next->next) {struct Node* nodeNew = malloc(sizeof(struct Node));nodeNew->val = node->val;nodeNew->next = node->next;node->next = nodeNew;}for (struct Node* node = head; node != NULL; node = node->next->next) {struct Node* nodeNew = node->next;nodeNew->random = (node->random != NULL) ? node->random->next : NULL;}struct Node* headNew = head->next;for (struct Node* node = head; node != NULL; node = node->next) {struct Node* nodeNew = node->next;node->next = node->next->next;nodeNew->next = (nodeNew->next != NULL) ? nodeNew->next->next : NULL;}return headNew;
}作者:力扣官方题解
链接:https://leetcode.cn/problems/copy-list-with-random-pointer/solutions/889166/fu-zhi-dai-sui-ji-zhi-zhen-de-lian-biao-rblsf/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 博主的 时O(n ^ 2) 空O(n)刺眼代码:

/*** Definition for a Node.* struct Node {*     int val;*     struct Node *next;*     struct Node *random;* };*/
struct Node* BuyNode()
{struct Node* ptmp = (struct Node*)malloc(sizeof(struct Node));//assert(ptmp);ptmp->next = NULL;return ptmp;
}
struct Node* copyRandomList(struct Node* head) {//sentry head 没动struct Node* Sentry = BuyNode();//sentry哨兵//assert(Sentry);struct Node* pcur = head, * pfr = head;//pfr == pFindRandomstruct Node* pNewTmp = Sentry;//新链表while(pcur){pNewTmp->next = BuyNode();pNewTmp = pNewTmp->next;pNewTmp->val = pcur->val;pcur = pcur->next;}//处理randomstruct Node* pNewCur = Sentry->next;pcur = head;while(pNewCur){//找对应节点pfr = head;pNewTmp = Sentry->next;while(pcur->random != pfr){pfr = pfr->next;pNewTmp = pNewTmp->next;}//赋值randompNewCur->random = pNewTmp;//next结点pNewCur = pNewCur->next;pcur = pcur->next;}//free(sentry);return Sentry->next;
}

每日表情包:

我王小桃想要赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/449246.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

呼叫中心座席转接策略

在企业进行批量呼出任务的时候,为了最大效率使用坐席,通常是以班组为单位,进行批量呼出任务。在选择班组作为呼叫业务的基本单位时,就涉及到为呼叫选择坐席策略。 OKCC系统的班组对于选择坐席设计了五种策略,即轮选、最…

TCP/IP详细介绍以及TCP/IP寻址

目录 ​编辑 1. TCP/IP 介绍 2. 计算机通信协议(Computer Communication Protocol) 3. 什么是 TCP/IP? 4. 在 TCP/IP 内部 5. TCP 使用固定的连接 6. IP 是无连接的 7. IP 路由器 8. TCP/IP 9. TCP/IP 寻址 10. IP地址 …

【Springcloud篇】学习笔记二(四至六章):Eureka、Zookeeper、Consul

第四章_Eureka服务注册与发现 1.Eureka基础知识 1.1Eureka工作流程-服务注册 1.2Eureka两大组件 2.单机Eureka构建步骤 IDEA生成EurekaServer端服务注册中心,类似于物业公司 EurekaClient端cloud-provider-payment8081将注册进EurekaServer成为服务提供者provide…

国家博物馆逆向抢票协议

逆向工程的具体步骤可以因项目和目标系统的不同而有所变化。然而,以下是一般逆向工程的一般步骤: 1. 分析目标系统:对待逆向的系统进行调研和了解,包括其架构、功能、使用的技术等方面的信息。 2. 反汇编或反编译:使…

代码随想录算法训练营第38天 | 动态规划理论基础 + 509.斐波那契数 + 70.爬楼梯 + 746.使用最小花费爬楼梯

今日任务 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 动态规划理论基础 理论基础:代码随想录 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划…

羊大师:春节佳节将至,送羊奶是个不错的选择

羊大师:春节佳节将至,送羊奶是个不错的选择 一年一度的春节即将到来,这是中国最重要的传统佳节之一。而在这个特殊的节日里,送礼是必不可少的一项传统。在不同的地区和不同的文化背景中,送礼的方式也有所不同。随着健…

像人一样浏览网页执行任务,腾讯AI lab发布多模态端到端Agent

Agent的发展成为了LLM发展的一个热点。只需通过简单指令,Agent帮你完成从输入内容、浏览网页、选择事项、点击、返回等一系列需要执行多步,才能完成的与网页交互的复杂任务。 比如给定任务:“搜索Apple商店,了解iPad智能保护壳Sm…

window 安装 jenkins 编写脚本

set JAVA_HOMED:\RuanJianKaiFa\jdk\jdk11 set CLASSPATH.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOMe%\lib\tools.jar; set Path%JAVA_HOME%\bin; java -jar jenkins.war 下载jenkins.war包,编写一个txt文档,把脚本复制进去,修改文件后缀为.bat文件…

IDEA JDBC配置

一、在pom中添加依赖 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency></dependencies> 然后同步一下 二、编写代码…

Linux文件系统和磁盘的 I/O 常用性能工具指标详解

I/O 栈的全景图&#xff1a; 把 Linux 存储系统的 I/O 栈&#xff0c;由上到下分为三个层次&#xff0c;分别是文件系统层、通用块层和设备层。 文件系统层&#xff0c;包括虚拟文件系统和其他各种文件系统的具体实现。它为上层的应用程序&#xff0c;提供标准的文件访问接口&…

详讲api网关之kong的基本概念及安装和使用(二)

consul的服务注册与发现 如果不知道consul的使用&#xff0c;可以点击上方链接&#xff0c;这是我写的关于consul的一篇文档。 upstreamconsul实现负载均衡 我们知道&#xff0c;配置upstream可以实现负载均衡&#xff0c;而consul实现了服务注册与发现&#xff0c;那么接下来…

政安晨的机器学习笔记——示例演绎在TensorFlow中使用 CSV数据(基于Colab的Jupyter笔记)(1.5万字长文超详细)

本笔记提供了如何在 TensorFlow 中使用 CSV 数据的示例&#xff1a;用 tf.data 加载 CSV 数据。 其中包括两个主要部分&#xff1a; 从磁盘加载数据将数据预处理为适合训练的形式。 本笔记侧重于加载&#xff0c;并提供了一些关于预处理的快速示例。 设置 import pandas a…