C++速通LeetCode中等第20题-随机链表的复制(三步简单图解)

devtools/2024/9/22 12:44:05/

 

 方法图解:

class Solution {
public:Node* copyRandomList(Node* head) {if ( !head ) {return nullptr;}Node *cur = head;// 1. 在原节点的每个节点后创建一个节点while ( cur ) {Node *newNode = new Node(cur -> val);newNode -> next = cur -> next;cur -> next = newNode;cur = cur -> next ->next;}// 2. 更新新节点的random指针cur = head;while ( cur ) {if ( cur -> random == nullptr ) {cur -> next -> random = nullptr;} else {cur -> next -> random = cur -> random -> next;}cur = cur -> next -> next;}// 3. 将两个链表拆开Node *dummy = new Node(-1);Node *curnew = dummy, *curold = head;while ( curold ) {curnew -> next = curold -> next;curnew = curnew -> next;curold->next = curnew->next;curold = curold -> next;}return dummy -> next;}
};


http://www.ppmy.cn/devtools/115463.html

相关文章

数据结构之基数排序简介与举例

数据结构之基数排序简介与举例 1、基数排序简介 基数排序(Radix Sort)是一种非比较型整数排序算法,通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。它基于多关键字排序的思想,将…

设置spring boot禁止日志输出到控制台

我们一个Spring Boot项目,使用了org.slf4j.Logger.info记录日志。类似代码如下: Slf4j public class CTest {public void test() {。。。log.info("Hello World!");} }结果运行的时候,系统除了将日志记录到日志文件,还…

SDKMAN!软件开发工具包管理器

认识一下SDKMAN!(The Software Development Kit Manager)是您在Unix系统上轻松管理多个软件开发工具包的可靠伴侣。想象一下,有不同版本的SDK,需要一种无感知的方式在它们之间切换。SDKMAN拥有易于使用的命令行界面(CLI)和API。其…

Python编码系列—Python代理模式:为对象赋予超能力的魔法

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

HTTPS是如何保证安全传输的

我们都知道https是保证安全传输的,那么究竟是如何保证的呢? 答:通过使⽤对称加密、⾮对称加密、数字证书等⽅式来保证数据的安全传输。 下面,就让我们来详细了解一下,具体是如何做的: 客户端向服务端发送数…

AI模型对比研究员创意

大语言模型可以接受训练,完成许多任务。其中最广为人知的用途之一是作为生成式人工智能:当收到提示或被问到问题时,它们可以生成文本作为答复。例如,公开的大语言模型 ChatGPT 可以根据用户输入生成文章、诗歌和其他文本形式。 任…

初探IT世界:从基础到未来

初探IT世界:从基础到未来 1. 引言 随着科技的不断发展,IT(信息技术)已经成为全球经济的支柱之一。从软件开发、网络安全到数据分析和人工智能,IT 领域为我们的日常生活提供了许多不可或缺的技术服务。无论你是初学者…

本地部署轻量级web开发框架Flask结合内网穿透公网环境访问管理界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask,以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语…