【刷题专栏—突破思维】LeetCode 138. 随机链表的复制

在这里插入图片描述

前言
随机链表的复制涉及到复制一个链表,该链表不仅包含普通的next指针,还包含random指针,该指针指向链表中的任意节点或空节点。


文章目录

  • 原地修改链表

题目链接: LeetCode 138. 随机链表的复制

原地修改链表

题目介绍:
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。
构造这个链表的深拷贝。 深拷贝应该正好由 n 个全新节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。
例如,如果原链表中有 X 和 Y 两个节点,其中 X.random -> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random -> y 。
返回复制链表的头节点。
用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:
val:一个表示 Node.val 的整数。
random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。

示例1:
在这里插入图片描述
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]

示例2:
在这里插入图片描述
输入:head = [[3,null],[3,0],[3,null]]
输出:[[3,null],[3,0],[3,null]]


在这里插入图片描述

  1. 第一次遍历:复制节点并插入到原节点后面
    • 对于每个原节点,创建一个新节点,并将新节点插入到原节点后面。
    • 新节点的val和next指针与原节点相同,而random指针初始化为NULL。

在这里插入图片描述

struct Node* current = head;
while (current != NULL) {struct Node* copy = (struct Node*)malloc(sizeof(struct Node));copy->val = current->val;copy->next = current->next;copy->random = NULL;current->next = copy;current = copy->next;
}
  1. 第二次遍历:更新复制节点的 random 指针

    • 对于每个原节点,如果其random指针不为NULL,则将对应的复制节点的random指针指向原节点的random指针的下一个节点。

在这里插入图片描述

current = head;
while (current != NULL) {if (current->random != NULL) {current->next->random = current->random->next;}current = current->next->next;
}
  1. 第三次遍历:拆分原链表和复制链表

    • 将链表拆分为原链表和复制链表,同时恢复原链表的next指针。

在这里插入图片描述

struct Node* newHead = head->next;
struct Node* newCurrent = newHead;
current = head;
while (current != NULL) {current->next = newCurrent->next;current = current->next;if (current != NULL) {newCurrent->next = current->next;newCurrent = newCurrent->next;}
}

在这里插入图片描述
如果你喜欢这篇文章,点赞👍+评论+关注⭐️哦!
欢迎大家提出疑问,以及不同的见解。

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

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

相关文章

3dMax2024新功能和工作流增强功能速览

3dMax2024新功能和工作流增强功能速览 Autodesk发布的3dMax2024引入了一系列新功能和工作流增强功能,如下所示: 更新的“指定控制器”卷展栏:这个现代化的功能为动画师提供了更高效的工作方式,简化了他们的动画流程。 布尔修饰符…

土地利用强度(LUI)综合指数

土地利用强度的概念可以解释为某一时间特定区域内人类活动对土地利用强度的干扰程度[1],其不仅反映不同土地利用类型本身的自然属性,也体现了人类利用土地的深度和广度,进而揭示在人类社会系统干扰下土地资源自然综合体自然平衡的保持状态[2]…

MySQL主从搭建

1、MySQL主从同步原理 基本原理: slave会从master读取binlog来进行数据同步 具体步骤: step1:master将数据改变记录到二进制日志(binary log)中。step2: 当slave上执行 start slave 命令之后&#xff0c…

教你轻松解决win系统ucrtbased.dll丢失的问题,亲测有效!

ucrtbased.dll是一个动态链接库文件(DLL),它是Windows操作系统中的一部分,主要负责提供操作系统和应用程序所需的函数和接口。这个文件包含了操作系统和应用程序共同使用的通用代码,以确保不同程序之间的兼容性和稳定性…

机器学习的医疗乳腺癌数据的乳腺癌疾病预测

项目视频讲解:基于机器学习的医疗乳腺癌数据的乳腺癌疾病预测 完整代码数据分享_哔哩哔哩_bilibili 效果演示: 代码: #第一步!导入我们需要的工具 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns %matplotlib inlin…

vue2【axios请求】

1:axios作用 axios(发音:艾克c奥斯)是前端圈最火的,专注于数据请求的库。 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中axios的github:https://github.com/axios/axios 中文官网地址…

Spring 国际化:i18n 如何使用

1、i18n概述 国际化也称作i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。由于软件发行可能面向多个国家,对于不同国家的用户,软件显示不同语言的过程就是国际化。通常来讲,软件中的国…

为什么Transformer模型中使用Layer Normalization(Layer Norm)而不是Batch Normalization(BN)

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

anaconda安装依赖报错ERROR: Cannot unpack file C:\Users\33659\AppData\Loca...|问题记录

执行命令: # 安装matplotlib依赖 pip install matplotlib-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com出现问题: ERROR: Cannot unpack file C:\Users\33659\AppData\Local\Temp\pip-unpack-0au_blfq\simple (downloa…

【入门篇】1.4 redis 客户端 之 Lettuce 详解

文章目录 1. 简介1. 什么是Lettuce2. Lettuce与其他Redis客户端的比较3. Lettuce的特性和优势 2. 安装和配置3. 连接池配置1. 什么是连接池2. Lettuce的连接池使用与配置3. 连接池配置项 4. 基本操作1. 如何创建Lettuce连接2. Lettuce的基本操作如增删改查3. Lettuce的事务操作…

JavaScript管理HTMLDOM元素(增删改查)

本文主要讲解JavaScript如何通过管理HTML上的DOM元素&#xff0c;其中包括如何查询、创建、修改以及删除具体功能和源码讲解。 增加 首先我们准备一个HTML框架和简单CSS样式&#xff0c;我对其中元素作用和关系进行一个简单说明。 <!DOCTYPE html> <html><he…

【Qt开发流程】之HelloWorld程序

【Qt开发流程】之HelloWorld程序 目的编写程序新建项目文件说明及界面设计 程序运行及发布程序运行程序发布手动构建使用windeployqt进行构建 设置应用程序图标修改快捷键类型列表命令行编译程序命令行编译.ui文件自定义类项目模式及项目文件介绍项目模式项目文件 目的 从Hell…