当前位置: 首页 > 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.dtcms.com/a/406846.html

相关文章:

  • Kendo UI for jQuery 2025 Q3新版亮点 - AI 智能网格与全新表单体验
  • 职业规划之软件测试工作五年后,做技术还是做管理?
  • 【一文了解】C#的StringSplitOptions枚举
  • 大连仟亿科技网站建设公司 概况网站搜索 代码
  • 高端网站设计中的微交互:细节如何决定用户体验
  • 香港科技大学提出融合神经网络框架,高效预测蛋白质序列的多金属结合位点
  • 9.9奶茶项目:matlab+FPGA的cordic算法计算±π之间的sin和cos值
  • 越野组(遇到的问题)
  • 29.9元汉堡项目:FPGA多普勒频移解调功能设计开发
  • MyBatis 大于等于、小于等于
  • 南通自助模板建站php做网站好吗
  • [Windows] PDF 专业压缩工具 v3.6
  • 从 0 到 1Flink DataStream API 入门与上手实战
  • 做网站设计电脑买什么高端本好营销企业有哪些
  • 系统架构设计师备考第34天——软件架构风格
  • postman使用总结
  • 做网站 怎么连到数据库怎么做存储网站
  • Java 后端面试技术文档(参考)
  • 分享智能跳绳解决方案
  • 毕业设计的网站app开发公司介绍
  • WebSocket实时通信不卡顿:cpolar内网穿透实验室第503个成功挑战
  • PyTorch 数据处理工具箱
  • C++项目:仿muduo库高并发服务器-------时间轮定时器
  • 边玩边学,13个Python小游戏(含源码)
  • 有了域名怎样做淘客网站中国铁建统一企业门户
  • 大连网站排名网络推广公司一个很好的个人网站开发
  • Windows文件快速检索工具:基于PyQt5的高效实现
  • C++Primerplus 编程练习 第十三章
  • Custom SRP 11 - Post Processing
  • 【Linux】进程替换