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

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

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.jsqmd.com/news/19557/

相关文章:

  • 成功案例分享|ArmSoM CM5赋能海洋保育,边缘AI守护鲸豚之声
  • 2025 年最新推荐走心机加工实力厂家排行榜:覆盖航空 / 医疗 / 汽车等多领域优质企业精选 不锈钢零件/高铁零件/精密数控走心机加工厂家推荐
  • KeyShot 2025最新安装包下载及详细安装教程,附永久免费中文安装包 KeyShot2025
  • 复矩阵的QR分解
  • 高校软件测试实训平台 | 教学实训一站式管理,助力高校软件测试人才培养
  • 2025 最新压滤机厂家推荐排行榜:景津装备领衔,隔膜 / 厢式 / 污泥专用设备权威榜单自动/污泥/化工/制药压滤机厂家推荐
  • Maven-继承与聚合 - 实践
  • 千疮百孔的心被恨与悲彻底剥离 Kill my memory 让我将快乐全忘记
  • 速尝鲜!PS 2026 新功能:移除工具 + 神经滤镜
  • 谎言 欺骗 鄙夷 如破碎瓦砾铺满地 利用陷害窒息莫名遭受唾骂遗弃
  • git 切账户
  • 权威调研榜单:天津全屋定制整体橱柜方案TOP4榜单好评深度解析
  • 别再手动处理琐事了!用Coze搭建AI工作流,我每天白赚2小时
  • 单时段机组组合优化的粒子群算法实现(MATLAB)
  • Day21-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\Stream-集合框架(stream)
  • 权威调研榜单:湖南张家界旅游团服务TOP3榜单好评深度解析
  • 权威调研榜单:上海文章批量生成器服务商TOP9榜单技术能力深度解析
  • 人工智能客服企业哪家强?2025年AI智能客服排名推荐
  • [GXYCTF2019]Ping Ping Ping 1
  • C# 元组 Tuple ValueTuple
  • Java语言的核心特性与大数据应用研究
  • Dify Windows Docker.desktop 部署
  • SketchUp 2022-2025 坯子插件库 v3.2.6官方正式版下载安装教程
  • 国标GB28181算法算力平台EasyGBS如何在平安乡村搭建无线视频联网监控系统?
  • 权威调研榜单:安宫牛黄丸生产厂家TOP3综合实力解析
  • (自用)如何使用 mt19937 生成随机数?
  • 第四章 windows实战-向日葵
  • 轻量服务器Lighthouse + 1Panel + Halo,三步打造你的专属网站
  • 第四章 windows实战-emlog
  • Docling + LangChain + RAG 构建智能文档问答系统