请实现一个函数,复制一个复杂链表。在复杂链表中,每个节点除了一个next指针指向下一个节点,还有一个random指针指向链表中的任意节点或者为空。
1.分治
先复制当前的节点,然后递归的分别复制next或random。在复制next和random的过程中会重复复制相同节点,因此需要一个map来记录当前的复制情况。
2.拆分法
首先,将复制节点拼接到原始节点的后面,在复制完成后,复制节点与原始节点在同一个链表中。其次,复制random指针。最后,将这个链表拆分成原始链表与复制链表。
1.分治
class Solution {
//key是原始链表节点的指针,value是对应的复杂链表节点的指针
unordered_map<RandomListNode*,RandomListNode*> hmap;
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead==NULL)return NULL;
//如果当前节点已经被复制过,则直接返回
if(hmap[pHead]!=NULL)return hmap[pHead];
//复制当前节点
RandomListNode* node = new RandomListNode(pHead->label);
hmap[pHead] = node;
//复制next
node->next = Clone(pHead->next);
//复制random
node->random = Clone(pHead->random);
return node;
}
};
2.拆分法
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead==NULL)return NULL;
RandomListNode* currNode = pHead;
//将复制节点拼接到原始节点后
while(currNode){
RandomListNode* node = new RandomListNode(currNode->label);
node->next = currNode->next;
currNode->next = node;
currNode = node->next;
}
//复制random指针
currNode = pHead;
while(currNode){
RandomListNode* node = currNode->next;
if(currNode->random!=NULL)
node->random = currNode->random->next;
currNode = node->next;
}
//拆分
RandomListNode* pCloneHead = pHead->next;
RandomListNode* tmp;
currNode = pHead;
while(currNode->next){
tmp = currNode->next;
currNode->next = tmp->next;
currNode = tmp;
}
return pCloneHead;
}
};
文章浏览阅读275次。Spring整合Hibernate_spring整合hibernate
文章浏览阅读78次。做 java 开发的,经常会用 Eclipse 或者 MyEclise 集成开发环境,一些实用的 Eclipse 快捷键和使用技巧,可以在平常开发中节约出很多时间提高工作效率,下面我就结合自己开发中的使用和大家分享一下 Eclipse 中常用到的快捷键和技巧。15 个 Eclipse 常用开发快捷键使用技巧1、alt+?或alt+/:自动补全代码或者提示代码这个是我最得意的快捷键组..._eclipese 使用技巧大全
文章浏览阅读567次,点赞6次,收藏11次。解决方案:CO模块使用前台事务码KP26维护活动类型价格,即可。业务操作:PP模块前台事务码CR02维护活动类型时,报错如上。报错原因:CO模块没有为活动类型进行价格维护。CO模块KP26维护作业类型价格完毕。2024年1月26日 写于上海。事务码KP26进入,_作业类型 lab 没有为成本中心 ql99 1001 设置
文章浏览阅读3.2k次,点赞4次,收藏10次。解决TortoiseGitPlink要求输入密码_tortoisegitplink
文章浏览阅读4.7k次,点赞2次,收藏5次。详细了解大端和小端的存储_大端存储和小端存储
文章浏览阅读6.3k次,点赞5次,收藏49次。一、从零开始建设企业信息安全系统:企业信息安全体系分为:信息安全技术体系和信息安全管理体系 信息安全技术体系: 两个层面: 1.需建设安全相关基础设施和系统,以具备解决相关安全问题的能力。 2.需具备安全运营能力,只有正确部署和使用设备,才能真正保障信息安全。 信息安全管理体系: 两个层面: 1.具备信息安全相关的制度、规范、流程及策略。 2.具..._信息安全运营服务实施指南研究
文章浏览阅读170次。一、前言我们发现Java Usage Tracker中存在设计缺陷(或者脆弱点),攻击者可以利用该缺陷创建任意文件、注入攻击者指定的参数以及提升本地权限。这些攻击手段也能组合使用实现权限提升,以便访问受影响系统中其他应用或者用户不能访问的某些保护资源。我们通过Zero Day Initiative与Oracle合作修复了这个漏洞,厂商已经在10月份补丁中推出了安全更新。因此,用户以及企业应当尽快安..._java防范代码问题的提权脱库
文章浏览阅读1.8k次。Sql与NoSql的区别Sql与NoSql的区别数据库关系型数据库非关系型数据库Sql与NoSql的区别数据库1.简单来说,就是存放各种数据的一个仓库,也就是一些数据按照某种模型存放到存储器的一个数据集合。简称DB,DataBase2.那么,数据有了,就需要管理,用来操纵和管理数据的软件就是数据管理系统 简称DBMS,DataBase Managent System3.那么 把上面这两个放到一起,也就是带有数据库并配置了管理系统的计算机系统 就是数据库系统 简称DBS,DataBase Syst_sql关系 非关系
文章浏览阅读5.1k次,点赞2次,收藏11次。编写算法实现图像绕中心点旋转功能先找到四个顶点旋转后的位置,然后求出新图像的大小找到旋转后的图像对应的原图像的位置,将原图像的颜色属性赋给相应位置的新图像(旋转思想为先将图像中心点移到坐标原点,然后进行旋转,最后再将坐标值换为实际的坐标值进行像素颜色属性的赋值)a=input('Enter the picture address:');b=input('Enter the angle:');R..._imrotate函数matlab
文章浏览阅读1.2k次。nginx连接上游服务器时,上游服务器暂时禁用问题解决_upstream server temporarily disabled while connecting to upstream
文章浏览阅读1k次。必须阶码一致才可以进行浮点数运算。_浮点运算方法和浮点运算器
文章浏览阅读128次。转自前言 上一篇文章已经介绍了简单的CDQ分治,包括经典的二维偏序和三维偏序问题,还有带修改和查询的二维/三维偏序问题。本文讲介绍多重CDQ分治的嵌套,即多维偏序问题。四维偏序问题给定N(N<=20000)个有序四元组(a,b,c,d),求对于每一个四元组(a,b,c,d),有多少个四元组(a2,b2,c2,d2)满足a2<a &..._cdq处理四维偏序