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

算法-深度拷贝链表(138)

深度拷贝一个链表可以分以下几个步骤:

步骤 1:插入新节点
  • 目标:在每个节点后面插入一个复制的节点。
  • 步骤
    1. 遍历整个链表。
    2. 对于每个节点 current,创建一个新节点 newNode,其值为 current.val
    3. 将 newNode 插入到 current 之后。即将 newNode.next 指向 current.next,然后将 current.next 指向 newNode

示例

原链表:A -> B -> C

插入后:A -> A' -> B -> B' -> C -> C'

步骤 2:复制随机指针
  • 目标:复制每个节点的 random 指针。
  • 步骤
    1. 再次从头遍历链表。
    2. 如果 current.random 不为 null,则设置 current.next.random 为 current.random.next

示例

如果 A.random -> C,则 A'.random -> C'

步骤 3:拆分链表
  • 目标:将链表分成原链表和复制链表。
  • 步骤
    1. 初始化两个指针:current 指向原链表头,copiedHead 指向新链表的头。
    2. 通过调整 next 指针,将链表分离。
    3. 遍历链表时,将 current.next 指向 current.next.next,将 copyCurrent.next 指向 copyCurrent.next.next

示例

分离后:

  • 原链表:A -> B -> C
  • 新链表:A' -> B' -> C’

代码如下:
 

class Node{int val;Node next;Node random;public Node(int val){this.val = val;this.next=null;this.random=null;}
}public class Solution24 {public Node copyRandomList(Node head) {// 长度为n的链表 随即指针random 可以指向链表任意节点或空节点// 构造深拷贝// 你的代码只接受原链表的头节点head为传入参数// 给定一个长度为 n 的链表,每个节点都有一个 val 和一个随机指针 random。// 我们的目标是创建一个新的链表,该链表是原链表的深拷贝。深拷贝意味着在新链表中创建完全独立的新节点,// 其中 next 和 random 指针指向新链表内的节点,而不是原链表中的节点。if(head == null) return null;// 在每个节点和创建一个新节点Node current=head;while(current!=null){Node newNode = new Node(current.val);newNode.next = current.next;current.next = newNode;current = newNode.next;}//复制random指针current=head;while(current!=null){if(current.random!=null){current.next.random=current.random.next;}current=current.next.next;}// 拆分链表current=head;Node copiedHead= head.next;Node copyCurrent=copiedHead;while(current!=null){current.next=current.next.next;if(copyCurrent.next!=null){copyCurrent.next=copyCurrent.next.next;}current=current.next;copyCurrent=copyCurrent.next;}return  copiedHead;}
}

相关文章:

算法-深度拷贝链表(138)

深度拷贝一个链表可以分以下几个步骤: 步骤 1:插入新节点 目标:在每个节点后面插入一个复制的节点。步骤: 遍历整个链表。对于每个节点 current,创建一个新节点 newNode,其值为 current.val。将 newNode …...

【Kubernetes】常见面试题汇总(十四)

目录 42.简述 Kubernetes 如何保证集群的安全性? 43.简述 Kubernetes 准入机制? 42.简述 Kubernetes 如何保证集群的安全性? Kubernetes 通过一系列机制来实现集群的安全控制,主要有如下不同的维度: (1&…...

灵当CRM系统index.php存在SQL注入漏洞

文章目录 免责申明漏洞描述搜索语法漏洞复现nuclei修复建议 免责申明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 漏洞描述 灵当CRM系统是一款功能全面、易于使用的客户关系管理(C…...

详解QT元对象系统用法

文章目录 元枚举 QMetaEnum元方法 QMetaMethod元对象构建 QMetaObjectBuilder元属性 QMetaProperty定义元对象属性获取属性信息与信号和槽结合QML属性访问动态属性元类型 QMetaTypeQt的元对象系统是Qt框架中的一个核心特性,它为Qt应用程序提供了一种动态类型信息机制。这种机制…...

【Python】从基础到进阶(八):文件操作与上下文管理

🔥 个人主页:空白诗 文章目录 一、引言二、Python文件操作基础1. 打开文件2. 读取文件3. 写入文件4. 文件指针定位 三、上下文管理1. 使用with管理文件2. 自定义上下文管理器 四、文件操作的最佳实践五、案例:日志文件管理1. 需求分析2. 实现…...

c#:System.Text.Json 的使用四(如何忽略[JsonPropertyName])

环境: .net 6.0vs2022 系列篇: 《c#:System.Text.Json 的使用一》 《c#:System.Text.Json 的使用二》 《c#:System.Text.Json 的使用三(从Newtonsoft迁移)》 《c#:System.Text.Json…...

【CPU】CPU的物理核、逻辑核、超线程判断及L1、L2、L3缓存、CacheLine和CPU的TBL说明

CPU物理核及L1、L2、L3及缓存 CPU缓存 CPU 缓存是一种用于存储临时数据以提高计算机程序性能的内存层次结构。它通常分为三个层次:L1(一级)、L2(二级)和L3(三级)缓存。缓存大小是CPU的重…...

NET WPF使用组件库HandyControl

一、背景 WPF原生控件提供的API功能不够强大&#xff0c;设置一般的功能都需要进行很复杂的配置和实现。 1.1 原生按钮控件 例如&#xff0c;原生控件<Button/> 默认效果是这样的&#xff1a; MainWindow.xaml代码&#xff1a; <Window x:Class"wpf_demo.Mai…...

计算机毕业设计之:教学平台微信小程序(

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

VMware Fusion虚拟机Mac版 安装Win10系统教程

Mac分享吧 文章目录 Win10安装完成&#xff0c;软件打开效果一、VMware安装Windows10虚拟机1️⃣&#xff1a;准备镜像2️⃣&#xff1a;创建虚拟机3️⃣&#xff1a;虚拟机设置4️⃣&#xff1a;安装虚拟机&#xff08;步骤和Win11安装步骤类似&#xff0c;此处相同步骤处没换…...

头戴式蓝牙耳机性价比高的有哪些?四款高能性价比机型对比推荐

在当今科技日新月异的时代&#xff0c;头戴式蓝牙耳机已经成为了我们日常生活中不可或缺的一部分&#xff0c;无论是通勤路上、健身房内还是家中休闲时&#xff0c;一副优质的头戴式蓝牙耳机都能为我们带来沉浸式的听觉体验&#xff0c;那么头戴式蓝牙耳机性价比高的有哪些&…...

Linux:make,Makefile

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《Linux&#xff1a;make&#xff0c;Makefile》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&…...

基于代理的分布式身份管理方案

目的是使用分布式的联合计算分发去替换掉区块链中原有的类第三方可信中心的证书机制&#xff0c;更加去中心化。 GS-TBK Group Signatures with Time-bound Keys. CS-TBK 算法 Complete subtree With Time-bound Keys&#xff0c;该算法是用来辅助检测用户的签名是否有效&…...

VSCode开发ros程序无法智能提示的解决方法(一)

VSCode开发ros程序无法智能提示的解决方法&#xff08;一&#xff09; 问题解决 问题 在Ubuntu下使用vscode开发ros程序&#xff0c;无法进行智能提示。 解决 将 intelli Sense Engine 设置为 Tag Parser 即可。...

grep命令如何实现正则表达式搜索?

grep 命令支持使用正则表达式&#xff08;Regular Expression&#xff0c;简称 regex&#xff09;进行搜索 以下是一些使用正则表达式的基本示例&#xff1a; 搜索包含 “example” 的行&#xff1a; grep "example" file.txt搜索以 “abc” 开头的行&#xff1a; g…...

Vue报错 ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

报错 vue-project0.0.0 dev vite‘vite’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。解决 第1步. 控制台输入 npm install -g create-vite第2步. 控制台输入 npm install -g vite第3步. 运行就ok啦...

emqx代理订阅主题的方法

需求:需要代理订阅主题 mqtt/MaxVision/# 5.0以上的版本 界面操作添加就可以5.0以下版本 修改emqx.config 文件 首先在EMQX Dashboard(web端)中模块 emqx_mod_subscription 要启用修改配置 #1.切换目录 cd /home/emqx/etc#2.编辑配置文件 emqx.config vim emqx.config#3.修…...

页面关键路径渲染详解

关键路径渲染 浏览器不会等待全部资源都下载完后才进行渲染&#xff0c;而是采用渐进式的渲染方式&#xff0c;本文就介绍一下这种渐进式的渲染方式。 当浏览器获取到用于呈现网页的资源后&#xff0c;通常就会开始渲染网页。那么究竟是在什么时候就会开始渲染&#xff1f; …...

错题集锦之C语言

直接寻址和立即寻址 算法的又穷性是指算法程序的运行时间是有限的 未经赋值的全局变量值不确定 集成测试是为了发现概要设计的错误 自然连接要求两个关系中进行比较的是相同的属性&#xff0c;并且进行等值连接&#xff0c;在结果中还要把重复的属性列去掉 赋值运算符 赋值…...

【2024华为杯数学建模竞赛】E题 解题思路 | 视频特征提取

这高速公路应急车道紧急启用模型 问题 1解题思路解题思路 问题 2解题思路 问题 3解题思路 问题 1 某路段&#xff08;长度约5000m&#xff0c;行车道2应急车道1&#xff09;上有四个视频观测点&#xff08;见示意图1&#xff09;。请基于该路段四个视频数据解决如下问题&#x…...

Qwen3-Coder-30B-A3B-Instruct-FP8:终极代码模型对比分析指南

Qwen3-Coder-30B-A3B-Instruct-FP8&#xff1a;终极代码模型对比分析指南 【免费下载链接】Qwen3-Coder-30B-A3B-Instruct-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8 在当今AI代码生成领域&#xff0c;Qwen3-Coder-30B-…...

用C语言解决‘换硬币’问题?我来教你如何调试和验证你的循环逻辑

用C语言解决‘换硬币’问题&#xff1f;我来教你如何调试和验证你的循环逻辑 当你第一次面对"换硬币"这类组合问题时&#xff0c;那种既兴奋又困惑的感觉我至今记忆犹新。作为C语言初学者&#xff0c;理解多重循环的运作机制就像在迷宫中寻找出口——每次你以为找到了…...

top50 BF16算力(TFLOPS) 显卡排行榜 天梯图

排名显卡型号BF16算力(TFLOPS)售价(元)单TFLOPS价格(元)1B200(SXM)45002200000488.892H200(SXM)19801200000606.063MI300X1307750000573.834H100 SXM519501100000564.105RTX PRO 6000 Blackwell1150780000678.266H100 PCIe 80GB1560850000544.877RTX 50906803400050.008A100 80…...

基于Arduino与应变片传感器的高精度厨房电子秤DIY全攻略

1. 项目概述&#xff1a;用Arduino打造一台高精度厨房电子秤作为一个喜欢在厨房里折腾的硬件爱好者&#xff0c;我经常遇到需要精确称量食材的场合。市面上的电子秤要么精度不够&#xff0c;要么价格不菲&#xff0c;要么功能单一。于是&#xff0c;我萌生了自己动手做一台的想…...

2026上半年数据库系统工程师(软考)上午题回忆与解析(非标答版)

本文为考后回忆整理&#xff0c;非官方标准答案&#xff0c;旨在为考后对答案及下半年备考的同学提供参考。题目顺序和表述可能与原卷有出入&#xff0c;欢迎在评论区指正、补充。&#x1f4ca; 整体考情分析 刚结束的2026年上半年数据库系统工程师考试&#xff0c;上午题的风格…...

[智能体-81]:工程化智能体 = 模型做脑力拆解 + 框架做流程落地。前者是决策者,后者是管理者,tools/function call是内部员工;mcp server是外部资源;

一、全角色人设 & 对应技术组件角色定位对应技术模块核心职责决策者&#xff08;脑力大脑&#xff09;大模型 LLM理解目标、任务拆解、逻辑判断、分支决策、内容生成&#xff0c;负责 “想方案、定步骤”管理者&#xff08;流程总管&#xff09;智能体编排框架&#xff08;…...

写论文的神助攻!好用的AI写作辅助软件,逻辑清晰质量高

作为一名刚完成毕业论文的过来人&#xff0c;我太懂写论文的痛苦了 —— 选题迷茫、文献浩如烟海、框架混乱、逻辑不清、反复修改、查重降重反复折腾... 直到我发现了这套 AI 写作工具组合&#xff0c;简直是论文写作的 "开挂神器"&#xff0c;效率直接拉满&#xff…...

机器学习驱动储氢材料发现:从特征工程到DFT/MD验证的完整指南

1. 项目概述与核心思路氢能被视为未来清洁能源体系的关键一环&#xff0c;但如何安全、高效、经济地储存氢气&#xff0c;一直是制约其大规模应用的瓶颈。在众多储氢技术路线中&#xff0c;固态储氢&#xff0c;特别是基于金属氢化物的储氢材料&#xff0c;因其高体积储氢密度和…...

Performance-Fish:让你的《环世界》后期游戏帧率提升400%的终极优化方案

Performance-Fish&#xff1a;让你的《环世界》后期游戏帧率提升400%的终极优化方案 【免费下载链接】Performance-Fish Performance Mod for RimWorld 项目地址: https://gitcode.com/gh_mirrors/pe/Performance-Fish 你是否曾在《环世界》游戏后期&#xff0c;面对庞大…...

ZMJS,把 JavaScript 解释器放进 SAP ABAP 应用服务器之后,很多扩展思路会变得不一样

我今天看这个 oisee/zmjs 仓库时,最吸引人的不是它把 JavaScript 语法做进了 ABAP,而是它选择了一条非常 SAP 的路线,纯 ABAP、无外部依赖、无 Kernel Module、以类和接口的形式运行在 SAP 应用服务器内部。仓库自己的定位很直接,ZMJS 是一个面向 SAP ABAP 的 Mini JavaScr…...