剑指offer——37复杂链表的复制
题目描述
方法一:
使用hash表将链表节点记录,其key为节点值,这样有个缺陷就是当有相同的节点值时,就不知道key对应的是哪个节点地址了
方法二:
然后Copy则取带'的节点就行
//使用hash表将链表节点记录,其key为节点值,这样有个缺陷就是当有相同的节点值时,就不知道key对应的是哪个节点地址了
class Solution01 {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
unordered_map<int, RandomListNode*>map;
RandomListNode *p, *q, *newHead = new RandomListNode();
p = pHead;
q = newHead;
while (p != nullptr)
{
q->next = new RandomListNode(p->label);
map[p->label] = q->next;
p = p->next;
q = q->next;
}
p = pHead;
q = newHead->next;
while (p != nullptr)
{
if (p->random != nullptr)
q->random = map[p->random->label];
p = p->next;
q = q->next;
}
return newHead->next;
}
}; //直接将复制的节点置于原节点后面,这样找random节点时,很方便,不需要额外空间
class Solution02 {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if (pHead == nullptr)return nullptr;
RandomListNode *p = pHead, *q = nullptr, *newHead = new RandomListNode();
while (p != nullptr)//复制主链表
{
RandomListNode *q = new RandomListNode(p->label);
q->next = p->next;
p->next = q;
p = q->next;
}
p = pHead;
while (p != nullptr)//复制随机节点
{
if (p->random != nullptr)
p->next->random = p->random->next;//原链表指向哪,那么新链表就指向其后面
p = p->next->next;
}
p = pHead;
q = newHead;
while (p!=nullptr)//取出复制链表,并还原链表
{
q->next = p->next;//取新链表
p->next = p->next->next;//还原原链表
p = p->next;
q = q->next;
}
return newHead->next;
}
};
剑指offer——37复杂链表的复制的更多相关文章
- 剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制 Offer_35 题目详情 方法一 可以使用一个HashMap来存储旧结点和新结点的映射. 这种方法需要遍历链表两遍,因为需要首先知道映射关系才能求出next ...
- 【剑指Offer】复杂链表的复制 解题报告(Python)
[剑指Offer]复杂链表的复制 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 《剑指offer》复杂链表的复制
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- 【Java】 剑指offer(35) 复杂链表的复制
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现函数ComplexListNode* Clone(Compl ...
- Go语言实现:【剑指offer】复杂链表的复制
该题目来源于牛客网<剑指offer>专题. 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.( ...
- 剑指Offer 25. 复杂链表的复制 (链表)
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...
- 剑指offer——35复杂链表的复制
这题很是巧妙. 突破了常规思维. 竟然可以把传入进来的链表和复制的链表链在一起.然后再算出slibling指针.最后在分离. 直接把空间复杂度变为O(1)了. 很巧妙,很实用. 题目: 请实现函数Co ...
- 剑指OFFER之复杂链表的复制(九度OJ1524)
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一 ...
- 剑指offer:复杂链表的复制
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用, ...
随机推荐
- gensim中TaggedDocument 怎么使用
我有两个目录,我想从中读取它们的文本文件并给它们贴上标签,但我不知道如何通过taggedDocument来实现这一点.我以为它可以作为标记文档([strings],[labels])工作,但这显然不起 ...
- mac os 下安装mysql
在 http://dev.mysql.com/downloads/mysql/ 选择下载mysql 注册并选择相应的版本后,得到下载链接:: wget http://dev.mysql.com/get ...
- [7.19NOIP模拟测试6]失恋三连(雾 题解
题面(加密) 不得不说这次的题除了引起单身汪极度不适之外还是出的很有水平的…… A. 很好的dp题 模型非常简单,如果数据范围足够友好的话就是一道dp入门题 30%: 我们可以设$dp[i][j]$为 ...
- 30天轻松学习javaweb_修改tomcat的servlet模板
在MyEclipse目录下搜索com.genuitec.eclipse.wizards 得到搜索结果 com.genuitec.eclipse.wizards_9.0.0.me201108091322 ...
- 前端(二十三)—— Vue环境搭建
目录 一.Vue环境搭建 一.Vue环境搭建 1.安装node 去官网下载node安装包 傻瓜式安装 万一安装后终端没有node环境,要进行node环境变量的配置(C:\Program Files\n ...
- C#比较两个日期的大小
DateTime dt1 = DateTime.Parse("2006-04-01"); DateTime dt2 = DateTime.Parse("2006-05-0 ...
- ECMS清除挂马以及后台升级实战(从ecms6.6~ecms7.0)
当时状况 Windows Server 2008 R2 Enterprise + 帝国CMS6.6 + MySql server软件: Microsoft-IIS/7.5 操作系统: WINNT ...
- 使用promise构建一个向服务器异步数据请求
function getJSON(Url){ return new Promise((resolve,reject)=>{ request= new XMLHttpRequest(); requ ...
- centos6.8 oracle 11.2.0.4 11g安装
配置Linux系统参数 配置阿里云yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup ...
- BCZM : 1.16
24点游戏 解法一:穷举法 解法二:分治法