【C++习题】22.随机链表的复制
文章目录
- 题目:138. 随机链表的复制 - 力扣(LeetCode)
- 代码:
题目:138. 随机链表的复制 - 力扣(LeetCode)
链接🔗:138. 随机链表的复制 - 力扣(LeetCode)
题目:

代码:
class Solution {
public:// 函数功能:深拷贝带随机指针的链表// 参数:原链表的头节点指针// 返回值:拷贝后的新链表的头节点指针Node* copyRandomList(Node* head) {// 创建map用于存储原节点到拷贝节点的映射关系// key: 原链表节点地址// value: 对应的拷贝节点地址map<Node*, Node*> nodeMap;// copyhead指向拷贝链表的头节点// copytail指向拷贝链表的尾节点Node* copyhead = nullptr, *copytail = nullptr;// 第一次遍历:复制节点值和next指针Node* cur = head;while(cur){// 如果是第一个节点if(copytail == nullptr){// 创建头节点copyhead = copytail = new Node(cur->val);}else{// 创建新节点并连接到尾部copytail->next = new Node(cur->val);copytail = copytail->next;}// 建立原节点和拷贝节点的映射关系nodeMap[cur] = copytail;// 继续处理下一个节点cur = cur->next;}// 第二次遍历:处理random指针cur = head; // cur指向原链表Node* copy = copyhead; // copy指向拷贝链表while(cur){// 如果原节点的random为空if(cur->random == nullptr){copy->random = nullptr;}else{// 通过map找到原节点random指向的节点对应的拷贝节点copy->random = nodeMap[cur->random];}// 继续处理下一个节点cur = cur->next;copy = copy->next;}return copyhead;}
};
算法思路解析:
- 整体思路:
- 分两次遍历完成深拷贝
- 第一次遍历复制节点值和
next指针,同时建立映射关系- 第二次遍历处理
random指针- 具体步骤:
- 第一次遍历:
- 复制每个节点的值
- 建立
next连接- 将原节点和对应的拷贝节点存入
map- 第二次遍历:
- 根据原节点的
random指向- 通过
map找到对应的拷贝节点- 建立
random连接- 时间复杂度:
O(N),需要两次遍历链表map的插入和查找操作是O(logN)- 空间复杂度:
O(N),需要额外的map存储映射关系
相关文章:
【C++习题】22.随机链表的复制
文章目录 题目:138. 随机链表的复制 - 力扣(LeetCode)代码: 题目:138. 随机链表的复制 - 力扣(LeetCode) 链接🔗:138. 随机链表的复制 - 力扣(LeetCode&…...
备考蓝桥杯:数据结构概念浅谈
目录 1数据结构的概念 什么是数据结构: 为什么要有数据结构 2.数据结构的三个组成要素 1.逻辑结构 2.存储结构 3.数据运算 3。算法好坏的度量(时间复杂度和空间复杂度) 时间复杂度计算 最优和平均和最差时间复杂度 计算时间复杂度例子 空间复…...
【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集
【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…...
创建型模式3.建造者模式
创建型模式 工厂方法模式(Factory Method Pattern)抽象工厂模式(Abstract Factory Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern)单例模式(Singleto…...
【集成学习】Boosting算法详解
文章目录 1. 集成学习概述2. Boosting算法详解3. Gradient Boosting算法详解3.1 基本思想3.2 公式推导 4. Python实现 1. 集成学习概述 集成学习(Ensemble Learning)是一种通过结合多个模型的预测结果来提高整体预测性能的技术。相比于单个模型…...
【Orca】Orca - Graphlet 和 Orbit 计数算法
Orca(ORbit Counting Algorithm)是一种用于对网络中的小图进行计数的有效算法。它计算网络中每个节点的节点和边缘轨道(4 节点和 5 节点小图)。 orca是一个用于图形网络分析的工具,主要用于计算图中的 graphlets&#…...
58. Three.js案例-创建一个带有红蓝配置的半球光源的场景
58. Three.js案例-创建一个带有红蓝配置的半球光源的场景 实现效果 本案例展示了如何使用Three.js创建一个带有红蓝配置的半球光源的场景,并在其中添加一个旋转的球体。通过设置不同的光照参数,可以观察到球体表面材质的变化。 知识点 WebGLRenderer …...
【Git原理和使用】Git 分支管理(创建、切换、合并、删除、bug分支)
一、理解分支 我们可以把分支理解为一个分身,这个分身是与我们的主身是相互独立的,比如我们的主身在这个月学C,而分身在这个月学java,在一个月以后我们让分身与主身融合,这样主身在一个月内既学会了C,也学…...
义乌购的反爬虫机制怎么应对?
在面对义乌购的反爬虫机制时,可以采取以下几种策略来应对: 1. 使用代理IP 义乌购可能会对频繁访问的IP地址进行限制,因此使用代理IP可以有效地隐藏爬虫的真实IP地址,避免被封禁。可以构建一个代理IP池,每次请求时随机…...
消息中间件面试
RabbitMQ 如何保证消息不丢失 消息重复消费 死信交换机 消息堆积怎么解决 高可用机制 Kafka 如何保证消息不丢失 如何保证消息的顺序性 高可用机制 数据清理机制 实现高性能的设计...
基于CLIP和DINOv2实现图像相似性方面的比较
概述 在人工智能领域,CLIP和DINOv2是计算机视觉领域的两大巨头。CLIP彻底改变了图像理解,而DINOv2为自监督学习带来了新的方法。 在本文中,我们将踏上一段旅程,揭示定义CLIP和DINOv2的优势和微妙之处。我们的目标是发现这些模型…...
利用Python爬虫获取API接口:探索数据的力量
引言 在当今数字化时代,数据已成为企业、研究机构和个人获取信息、洞察趋势和做出决策的重要资源。Python爬虫作为一种高效的数据采集工具,能够帮助我们自动化地从互联网上获取大量的数据。而API接口作为数据获取的重要途径之一,为我们提供了…...
【LeetCode】力扣刷题热题100道(1-5题)附源码 链表 子串 中位数 回文子串(C++)
目录 1.两数之和 2.两数相加-链表 3.无重复字符的最长子串 4.寻找两个正序数组的中位数 5.最长回文子串 1.两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。…...
Docker启动失败 - 解决方案
Docker启动失败 - 解决方案 问题原因解决方案service问题 问题 重启docker失败: toolchainendurance:~$ sudo systemctl restart docker Job for docker.service failed because:the control process exited with error codesee:"systemctl status docker.se…...
【Duilib】 List控件支持多选和获取选择的多条数据
问题 使用Duilib库写的一个UI页面用到了List控件,功能变动想支持选择多行数据。 分析 1、List控件本身支持使用SetMultiSelect接口设置是否多选: void SetMultiSelect(bool bMultiSel);2、List控件本身支持使用GetNextSelItem接口获取选中的下一个索引…...
android系统的一键编译与非一键编译 拆包 刷机方法
1.从远程仓库下载源码 别人已经帮我下载好了在Ubuntu上。并给我权限:chmod -R ow /data/F200/F200-master/ 2.按照readme.txt步骤操作 安装编译环境: sudo apt-get update sudo apt-get install git-core gnupg flex bison gperf build-essential z…...
SQL语言的函数实现
SQL语言的函数实现 引言 随着大数据时代的到来,数据的存储和管理变得越来越复杂。SQL(结构化查询语言)作为关系数据库的标准语言,其重要性不言而喻。在SQL语言中,函数是一个重要的组成部分,可以有效地帮助…...
OSPF - 2、3类LSA(Network-LSA、NetWork-Sunmmary-LSA)
前篇博客有对常用LSA的总结 2类LSA(Network-LSA) DR产生泛洪范围为本区域 作用: 描述MA网络拓扑信息和网络信息,拓扑信息主要描述当前MA网络中伪节点连接着哪几台路由。网络信息描述当前网络的 掩码和DR接口IP地址。 影响邻居建立中说到…...
运动相机拍摄的视频打不开怎么办
3-10 GoPro和大疆DJI运动相机的特点,小巧、高清、续航长、拍摄稳定,很多人会在一些重要场合用来拍摄视频,比如可以用来拿在手里拍摄快速运动中的人等等。 但是毕竟是电子产品,有时候是会出点问题的,比如意外断电、摔重…...
SpringBoot | 使用Apache POI库读取Excel文件介绍
关注WX:CodingTechWork 介绍 在日常开发中,我们经常需要处理Excel文件中的数据。无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到需要读取和操作Excel文件的场景。本文将详细介绍如何使用Java中的Apache PO…...
RTX4090D性能实测:OpenClaw调用Qwen3-32B镜像的token消耗优化
RTX4090D性能实测:OpenClaw调用Qwen3-32B镜像的token消耗优化 1. 测试背景与设备环境 去年底入手RTX4090D显卡后,我一直想验证它在本地大模型推理场景的实际表现。最近在星图平台发现预置Qwen3-32B模型的优化镜像,正好配合OpenClaw做自动化…...
Qwen-Image-2512-Pixel-Art-LoRA 生成像素画音效可视化波形图
Qwen-Image-2512-Pixel-Art-LoRA:当像素画“听见”声音 你有没有想过,声音也能被“画”出来?不是那种抽象的频谱图,而是充满想象力的像素画。最近,我尝试用Qwen-Image-2512模型,结合一个像素艺术风格的LoR…...
CoPaw多语言翻译效果展示:技术文档的中英互译质量评估
CoPaw多语言翻译效果展示:技术文档的中英互译质量评估 1. 引言 技术文档翻译一直是专业领域的痛点。传统翻译工具在处理计算机科学、医学等专业内容时,常常出现术语不准确、句式生硬、语境丢失等问题。最近测试了CoPaw这款多语言翻译工具,它…...
OpenClaw自动化测试进阶:Phi-3-vision-128k验证APP多语言界面一致性
OpenClaw自动化测试进阶:Phi-3-vision-128k验证APP多语言界面一致性 1. 为什么需要自动化多语言测试 作为独立开发者,去年我发布了一款工具类APP到国际市场。当用户基数突破1万时,收到了30多条关于德语界面错译的差评——某个按钮的"取…...
Pop 核心架构解析:深入理解 Bubble Tea 框架与邮件发送原理
Pop 核心架构解析:深入理解 Bubble Tea 框架与邮件发送原理 【免费下载链接】pop Send emails from your terminal 📬 项目地址: https://gitcode.com/gh_mirrors/pop2/pop 想要在终端中优雅地发送邮件吗?Pop 是一个基于 Go 语言开发的…...
嵌入式开发代码比对工具实战指南
1. 单片机开发中的代码版本管理痛点 在嵌入式开发领域,代码版本管理是每个工程师的必修课。我经历过无数次深夜调试时,突然发现某个功能在上一版还能正常工作,最新修改后却出现了异常。这时候,快速定位两个版本间的代码差异就成了…...
Leaflet 结合 leaflet-velocity 实现动态风场可视化的实战指南
1. 从零开始搭建风场可视化环境 第一次接触风场可视化时,我被那些动态流动的粒子效果深深吸引。作为Web地图开发中最酷炫的效果之一,用Leaflet实现风场展示其实比你想象的简单得多。我们先从最基础的环境搭建说起。 我推荐使用VSCode作为开发工具&#x…...
避坑指南:鸿蒙3.0+Flutter开发BLE应用时,权限、后台保活与多设备管理的那些坑
鸿蒙3.0与Flutter BLE开发实战:破解权限、后台保活与多设备管理的技术困局 在智能穿戴设备和IoT应用蓬勃发展的今天,蓝牙低功耗(BLE)技术已成为连接移动终端与智能硬件的关键桥梁。鸿蒙3.0系统以其分布式能力为BLE开发带来了新的可能性,而Flu…...
第一次遇见动态规划
一、什么是动态规划 动态规划是对问题的各状态维度进行分阶段、有顺序、无重复、决策性的遍历求解的算法思想。 “状态”、“阶段”、“决策”是构成动态规划算法的三要素。 问题能用动态规划求解需要满足三个基本条件: 1、子问题重叠性:动态规划算法…...
Threejs 使用Line2实现自定义线条宽度的实战指南
1. 为什么Three.js默认的lineWidth设置无效? 很多Three.js开发者第一次尝试修改线条宽度时,都会遇到一个令人困惑的问题:明明设置了lineWidth属性,但渲染出来的线条始终是1像素宽。这个问题其实源于WebGL的底层限制。WebGL基于Ope…...
