完整教程:leetcode_138 随机链表的复制

news/2025/10/22 16:22:52/文章来源:https://www.cnblogs.com/wzzkaifa/p/19158310

1. 题意

就是复制链表,不过链表多了一个random指针,

它随机的指向链表中的元素,或者是一个空值。

2. 题解

如果是普通的链表,我们直接复制就好了,不过多了一个随机指针,它有可能指向后面的元素,因此我们可以用一个哈希表进行记录。

2.1 哈希表

有两种写法,一种是递归的。就是官方说的回溯。

class Solution
{
public:
unordered_map<Node*, Node*> cachedNode;Node* copyRandomList(Node* head) {if (head == nullptr) {return nullptr;}if (!cachedNode.count(head)) {Node* headNew = new Node(head->val);cachedNode[head] = headNew;headNew->next = copyRandomList(head->next);headNew->random = copyRandomList(head->random);}return cachedNode[head];}};

另外一种是迭代的写法

/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/
class Solution
{
public:
Node* copyRandomList(Node* head) {
Node *nHead = NULL;
Node *pre = NULL;
map<Node *, Node *> pr;pr[NULL] = NULL;for (Node *cur = head; cur != NULL; cur = cur->next) {Node *ncur = new Node(cur->val);pr[cur] = ncur;if ( pre == NULL) {nHead = ncur;}else {pre->next = ncur;}pre = ncur;}for (Node *cur = head; cur != NULL; cur = cur->next ) {pr[cur]->random = pr[cur->random];}return nHead;}};
2.2 奇偶链表

这种解法是在0x3f的题解里面看到的,

我自己感觉跟哈希表其实是一样的,

只是这里取了一下巧。

具体做法就是,把每一个复制的链表节点给链接到老链表的后面。

这样其实就可以通过next来实现和哈希表一样的功能了!

最后再把链表给断开就好了。

class Solution
{
public:
Node* copyRandomList(Node* head) {
Node *nxt = NULL;
for (Node * cur = head; cur != NULL; cur = nxt) {
nxt = cur->next;
Node *nNode = new Node(cur->val);
cur->next = nNode;
nNode->next = nxt;
}
for (Node *cur = head; cur != NULL; cur = cur->next->next) {
if ( cur->random != NULL) {
cur->next->random = cur->random->next;
}
}
Node *nHead = NULL;
if (head)
nHead = head->next;
for (Node *cur = head; cur != NULL && cur->next != NULL; cur = nxt ) {
nxt = cur->next;
cur->next = nxt->next;
}
return nHead;
}
};

3. 参考

leetcode
0x3f

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

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

相关文章

成功案例分享|ArmSoM CM5赋能海洋保育,边缘AI守护鲸豚之声

在南太平洋的新西兰旺加雷港,一座漂浮的监测浮标正静默地倾听着海洋的密语。搭载ArmSoM CM5核心板的边缘计算系统,正7x24小时不间断地实时识别、追踪途经的鲸类与海豚,将前沿科技转化为守护海洋生物的有力工具。近日…

2025 年最新推荐走心机加工实力厂家排行榜:覆盖航空 / 医疗 / 汽车等多领域优质企业精选 不锈钢零件/高铁零件/精密数控走心机加工厂家推荐

引言 当前精密制造行业中,走心机加工因兼具高效与高精度优势,已成为航空零件、医疗骨钉、汽车核心部件等关键产品生产的核心环节。但市场上厂家数量繁杂,技术水平、设备配置与服务能力差异显著,不少企业在选择合作…

KeyShot 2025最新安装包下载及详细安装教程,附永久免费中文安装包 KeyShot2025

一、KeyShot2025软件下载 软件名称: KeyShot2025 软件大小:1.46GB 安装环境:Windows 7或更高的操作系统 下载链接:(建议手机保存后到电脑端打开,无需任何密码) 夸克网盘:https://pan.quark.cn/s/a209a4b9cff7 迅…

复矩阵的QR分解

复矩阵的QR分解 定义:QR分解 设 \(A\) 是一个 \(m \times n\) 复矩阵,且 \(m \geq n\)。如果存在一个 \(m \times r\) 酉矩阵 \(Q\) 和一个 \(r \times r\) 上三角矩阵 \(R\),使得 \[A = QR \]则称此分解为 \(A\) 的…

高校软件测试实训平台 | 教学实训一站式管理,助力高校软件测试人才培养

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集 测吧高校实训一体化平台 测吧软件测试实训平台专为高校实践教学打造,聚焦解决高校教学过程中企业案例缺失、测评效率低、资源分散等教学痛…

2025 最新压滤机厂家推荐排行榜:景津装备领衔,隔膜 / 厢式 / 污泥专用设备权威榜单自动/污泥/化工/制药压滤机厂家推荐

引言 压滤机作为环保、矿业、新能源等领域的核心固液分离设备,其性能直接影响企业生产效率与环保合规水平。当前市场呈现 “两极分化” 态势:头部品牌技术壁垒高但选择成本高,中小品牌数量繁杂却存在质量参差、售后…

Maven-继承与聚合 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

速尝鲜!PS 2026 新功能:移除工具 + 神经滤镜

自 Adobe 公司推出图像编辑与数字绘画软件 Photoshop 以来,已逾 35 年时光。这款软件始终引领行业潮流,如今,这家行业巨头再度发力,为 Photoshop 书写全新历史篇章 —— 正式发布 Photoshop 2026 V27.0 Beta 加强版…

谎言 欺骗 鄙夷 如破碎瓦砾铺满地 利用陷害窒息莫名遭受唾骂遗弃

test25 一本通tour 把边当作点,连像传递奖牌的另一个点,每一个奖牌经过一条树上到根的链,直接深搜+set 即可查询出在谁那里呆的最久。 #include<bits/stdc++.h> #define up(i,l,r) for(int i=l; i<=r; ++i…

git 切账户

切换git账户: 找到用户home目录,Windows即C:\Users\Administrator(当前用户),找到.gitconfig 打开编辑保存即可。

权威调研榜单:天津全屋定制整体橱柜方案TOP4榜单好评深度解析

随着居民对家居品质要求的提升,全屋定制整体橱柜市场呈现稳定增长态势。据行业数据显示,2024年国内定制橱柜市场规模已突破2800亿元,其中高端定制占比达到18%。本文基于品牌设计理念、材料工艺、功能配置及用户反馈…

别再手动处理琐事了!用Coze搭建AI工作流,我每天白赚2小时

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集 曾几何时,我的工作日是这样的:早上到公司先花30分钟整理前一天的销售数据,接着用1小时回复那些格式雷同的客户咨询邮件,下午还要耗费45…

单时段机组组合优化的粒子群算法实现(MATLAB)

使用粒子群算法(PSO)解决单时段机组组合问题的MATLAB实现。机组组合问题是在满足电力需求的前提下,确定哪些发电机组应该运行以及它们的出力水平,以最小化总成本。 % 单时段机组组合优化的粒子群算法实现 clear; clc…

Day21-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\Stream-集合框架(stream)

Stream JDK开始新增的一套API(java.util.stream),操作集合或者数组的数据 API(Application Programming Interface,应用程序编程接口) Stream流大量结合了Lambda的语言风格来编程,提供了一种更加强大,更加简单…

权威调研榜单:湖南张家界旅游团服务TOP3榜单好评深度解析

随着国内旅游市场的快速复苏,湖南张家界作为世界自然遗产地,近年来游客量持续攀升。据文旅部门统计数据显示,2024年张家界景区累计接待游客量突破3000万人次,同比增长25%。在此背景下,旅游团服务质量成为游客关注…

权威调研榜单:上海文章批量生成器服务商TOP9榜单技术能力深度解析

随着数字内容需求的快速增长,文章批量生成服务在企业和媒体领域的应用日益广泛。行业数据显示,2024年中国智能内容生成市场规模突破200亿元,其中批量文章生成服务年增长率达25%以上。本文基于服务商的技术能力、内容…

人工智能客服企业哪家强?2025年AI智能客服排名推荐

在数字化服务加速渗透的 2025 年,AI 智能在线客服系统已从 "可选工具" 升级为企业提升效率、优化体验的 "核心基建"。据行业报告显示,部署成熟 AI 客服的企业平均节省 40% 人工成本,客户首次解…

[GXYCTF2019]Ping Ping Ping 1

题目界面是get参数这里有过滤,可以用cat$IFS$9ls 参考

C# 元组 Tuple ValueTuple

Tuple是类,ValueTuple是结构。 // 创建一个元组并指定元素类型 (double, int) t1 = (4.5, 3); Console.WriteLine($"Tuple with elements {t1.Item1} and {t1.Item2}."); // 创建一个元组并为元素指定名称 …