【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…...
机械工程论文降AI工具免费推荐:2026年机械工程毕业论文降AI知网维普亲测4.8元达标完整指南
机械工程论文降AI工具免费推荐:2026年机械工程毕业论文降AI知网维普亲测4.8元达标完整指南 帮室友处理过机械工程论文降AI,前前后后试了四款工具,最后固定在嘎嘎降AI(www.aigcleaner.com)。 4.8元,达标率…...
告别手动!用Windows批处理脚本批量重命名MKV音轨(MkvToolnix v73实战)
告别手动!用Windows批处理脚本批量重命名MKV音轨(MkvToolnix v73实战) 每次整理下载的剧集资源时,最让人头疼的莫过于音轨信息错乱——明明视频是国语配音,音轨标签却显示为日语。手动修改不仅效率低下,还容…...
InfluxDB Studio:专业级时间序列数据库管理工具的终极指南
InfluxDB Studio:专业级时间序列数据库管理工具的终极指南 【免费下载链接】InfluxDBStudio InfluxDB Studio is a UI management tool for the InfluxDB time series database. 项目地址: https://gitcode.com/gh_mirrors/in/InfluxDBStudio 在当今数据驱动…...
别再套table了!手把手教你用LaTeX的longtable搞定跨页表格(附字体调整避坑指南)
LaTeX长表格排版实战:从table到longtable的平滑迁移与字体优化 第一次在LaTeX中遇到需要跨页的表格时,我像大多数初学者一样,本能地在longtable外面套了一层table环境——结果表格不仅无法正确分页,还出现了各种诡异的格式错乱。经…...
销售易NeoAgent 2.0深度解析:从“业务语义本体“到“智能体矩阵“的技术架构
一、行业背景:CRM的AI进化分水岭2026年,企业面临获客成本飙升、销售周期拉长、客户需求日益挑剔的多重挑战。传统CRM依赖人工录入且缺乏智能分析能力,往往沦为滞后的记录工具。市场正在寻找能够主动思考、预判和执行的下一代CRM架构。销售易基…...
嵌入式异构多处理器评估板:从核心原理到工业应用实战
1. 项目概述:当“异构”不再是PPT上的概念在嵌入式开发领域,尤其是边缘计算、工业控制和智能物联网设备中,我们正面临一个越来越普遍的困境:单一架构的处理器越来越难以满足复杂且矛盾的系统需求。一方面,我们需要强大…...
手把手教你用STC89C52和DS1302做一个带按键调节的电子时钟(附完整代码)
从零打造可调式电子时钟:STC89C52与DS1302实战指南 在创客和电子爱好者的世界里,能够亲手制作一个功能完整的电子时钟,无疑是检验单片机编程和硬件连接能力的绝佳项目。本文将带你使用STC89C52单片机和DS1302实时时钟芯片,配合LCD…...
别再硬套RBAC了!用Filebrowser的‘文件夹规则’搞定多级文件权限(附实战配置)
别再硬套RBAC了!用Filebrowser的‘文件夹规则’搞定多级文件权限(附实战配置) 在权限管理的世界里,RBAC(基于角色的访问控制)早已成为行业标准,但你是否遇到过这样的场景:一个只有三…...
从推荐逻辑到库存架构:木鸟民宿、携程民宿、爱彼迎场景化服务技术对比
摘要从技术和产品设计的角度看,木鸟民宿、携程民宿、爱彼迎三家平台在场景化服务上究竟走了怎样不同的技术路径?各自用了哪些手段把“住宿”这件事匹配到用户真实的生活场景里?三家平台在技术落地上各有侧重。木鸟民宿主打“标签化即时确认”…...
Ubuntu20.04安装Mapviz避坑指南:解决Qt与OpenCV冲突,手把手配置天地图
Ubuntu20.04安装Mapviz避坑指南:解决Qt与OpenCV冲突,手把手配置天地图 在ROS开发中,地图可视化工具Mapviz因其强大的插件系统和高度可定制性备受青睐。然而,Ubuntu20.04环境下安装Mapviz时,Qt版本冲突和OpenCV链接错误…...
