【剑指Offer】【链表】复杂链表的复制
2024-10-20 07:55:36
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空
/*
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
*/
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead == nullptr)
{
return nullptr;
}
//将链表每个结点复制一个克隆,放在该节点的后一位
RandomListNode *pNode = pHead;
while(pNode != nullptr)
{
RandomListNode *pClone = new RandomListNode(pNode->label);
pClone->next = pNode->next;
pClone->random = nullptr; pNode->next = pClone;
pNode = pClone->next;
}
//设置克隆结点的random
pNode = pHead;
while(pNode != nullptr)
{
RandomListNode *pClone = pNode->next;
if(pNode->random != nullptr)
{
pClone->random = pNode->random->next;
}
pNode = pClone->next;
}
//将链表拆分
pNode = pHead;
RandomListNode *pCloneHead = pHead->next;
while(pNode->next != nullptr)
{
RandomListNode *ptmp = pNode->next;
pNode->next = ptmp->next;
pNode = ptmp;
}
return pCloneHead;
}
};
最新文章
- IOS第一天多线程-04GCD通信
- CDH 的Cloudera Manager免费与收费版的对比表
- How to crack interviews ...
- birt 批改导出的文件名【转】
- Windows下查询进程、端口
- cmake 手册系列
- JQUERY1.9学习笔记 之基本过滤器(一) 动态选择器
- Mschart应用之曲线图表spline
- CentOS上编译安装Git
- Integer比较
- Win7 IE11无法打开的可能解决办法
- nginx https配置后无法访问,可能防火墙在捣鬼
- springmvc+mybatis环境搭建
- springboot项目部署云服务器
- AI 可视化
- Linux的LiveCd与CD、DVD版
- python并发编程(并发与并行,同步和异步,阻塞与非阻塞)
- centos7下安装docker(12.3容器之间的连通性)
- oracle 之 连接查询
- Le Chapitre VII
热门文章
- [编程基础] Python数据生成库Faker总结
- [C++标准模板库:自修教程与参考手册]关于deque
- 通过rpm安装postgresql-9.6无法远程连接的问题
- 区块链特辑——solidity语言基础(七)
- while2.c程序
- 腾讯出品小程序自动化测试框架【Minium】系列(二)项目配置及测试套件使用说明
- Python TensorFlow深度学习回归代码:DNNRegressor
- Windows Server 2016 安装AD和Exchange
- 国际财务系统基于ShardingSphere的数据分片和一主多从实践
- 树莓派4B—LCD触摸屏和硬件串口配置