剑指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.(注意,输出结果中请不要返回参数中的节点引用, ...
随机推荐
- 让IE8兼容识别css3选择器——selectivizr-min.js
html: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...
- CentOS7用rpmforge源!
确认系统是否安装了priority这个yum的插件,这个插件用来保证安装软件时候软件仓库先后次序,一般是默认先从官方base或者镜像安装,然后从社区用户contribute的软件中安装,再从第三方软件 ...
- 第一个脚本 "Hello World!"
打开记事本就可以编辑脚本,REM就相当于注释,和脚本语言一样 REM Hello World GUI r DELAY STRING notepad ENTER DELAY STRING Hello W ...
- ios移动输入框被软键盘遮挡
页面输入框会出现被软键盘挡住的问题: 解决方法:获取input点击事件设置body高度 $('input').bind('click',function(e){ var $this = $(this) ...
- JAVA的IO流下载音乐
public class DownloadMusic { private static int count = 1; public static void main(String[] args) th ...
- HA配置
主T800 eth0 192.168.2.32备T600 eth1 192.168.2.33安装nginx yum install -y nginx 关闭主备的防火墙iptables.selinux ...
- PAT_A1012#The Best Rank
Source: PAT A1012 The Best Rank (25 分) Description: To evaluate the performance of our first year CS ...
- UVA 10522 Height to Area(知三角形三高求面积)
思路:海伦公式, AC代码: #include<bits/stdc++.h> using namespace std; int main() { int n; scanf("%d ...
- C#基础-->cookie和session
关于cookie和session cookie 1:一个cookie中可以存放的数据最大在4KB左右 2:cookie存放于客户端 3:cookie分为两种 一种是会话cookie 一种是持久co ...
- Java原始数据类型
Java定义了八种基本类型的数据:byte,short,int,long,char,float,double和boolean. 基本类型通常被称为简单类型.这些基本类型可以分为四组: 整数 - 包括: ...