剑指Offer之复杂链表的复制
题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
解题思路
链表的结构大体如下:
真正的难点在于怎样复制这个random的结构。参考了dalao提出的思路,结合个人理解,总结如下:
复制总共需要遍历两边链表,第一遍是复制A到E,这一遍仅仅复制next
指针,把新的节点加入到原来节点的后面,应该是这个效果:
然后在复制random指针,后来复制的random指针只需要在原来节点的random指针后边就行了。
这种复制方式给了我们复制数据结构的一种新的思路!注意一个坑:不要破坏原来链表的结构!!!!!
AC代码
class Solution {public:RandomListNode* Clone(RandomListNode* pHead) {if(pHead == nullptr) {return nullptr;}using Node = RandomListNode;// 第一遍复制,等效为后移Node* p = pHead;while(p != nullptr) {Node* node = new Node(p->label);node->next = p->next;p->next = node;p = node->next;}// 第二遍复制random指针p = pHead;while(p != nullptr) {if(p->random != nullptr) {p->next->random = p->random->next;}p = p->next->next;}// 提取出偶数节点,注意复制不能破坏原有链表的结构!!!Node* pre = pHead;p = pHead->next;Node* head = p;while(pre != nullptr) {pre->next = p->next;pre = pre->next;if(pre != nullptr) {p->next = pre->next;}p = p->next;}return head;}
};
剑指Offer之复杂链表的复制相关推荐
- 【LeetCode】剑指 Offer 35. 复杂链表的复制
[LeetCode]剑指 Offer 35. 复杂链表的复制 文章目录 [LeetCode]剑指 Offer 35. 复杂链表的复制 package offer;import java.util.Ar ...
- 剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制 题目 题目链接 解题思路 题目理解 解题思路 具体代码 题目 题目链接 https://leetcode-cn.com/problems/fu-za-lian ...
- 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和
一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...
- 【三次优化】剑指 Offer 35. 复杂链表的复制
立志用最少代码做最高效的表达 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意 ...
- 剑指offer——35复杂链表的复制
这题很是巧妙. 突破了常规思维. 竟然可以把传入进来的链表和复制的链表链在一起.然后再算出slibling指针.最后在分离. 直接把空间复杂度变为O(1)了. 很巧妙,很实用. 题目: 请实现函数Co ...
- 剑指 Offer 35. 复杂链表的复制(哈希/衍生拆分图解)
题目描述 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null. ...
- LeetCode笔记】剑指 Offer 35. 复杂链表的复制(Java、哈希表、原地算法)
文章目录 题目描述 思路 && 代码 1. 哈希表法 2. 原地算法 二刷 题目描述 主要有两个考虑点: 不能改变原链表 新链表赋予 next.random 时,复制结点不一定存在 思 ...
- 【算法】剑指 Offer 35. 复杂链表的复制 【重刷】
1.概述 地址:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/ 请实现 copyRandomList 函数,复制一个复 ...
- 剑指 Offer JZ35 复杂链表的复制
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一 ...
最新文章
- WCF分布式开发步步为赢(1):WCF分布式框架基础概念
- Linux下解决“shutdown: command not found“问题
- 银联高校极客挑战赛 初赛 第一场、第二场合集(3+3题)
- 100条常用写作谚语(5)(6)(7)(8)
- 地图点随机分布均匀_英国标准协会(BSI)推荐的三坐标测点分布策略
- c语言程序设计自学跟谁好,双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好...
- c mysql 并发处理_mysql队列中实现并发读的实现方法解析
- LeetCode 1115. 交替打印FooBar
- Atitit 循环处理的新特性 for...else...
- 采用软改的方式激活Windows 7
- 实习工作日志 2019.03.06
- 柯洁夺斗地主全国冠军!斗地主可以排解输棋痛苦”
- 人工智能学python还是c_考虑到未来人工智能的发展,应该学习C++/C语言还是Python语言?...
- 判断用户输入的8位信用卡号码是否合法
- 安装floodlight ant时出错
- uwp windows_如何在Windows 10的UWP游戏中监视FPS
- 偏财入财库大富_八字有财库者大富
- 免费获取节假日API地址
- 解决pycharm更新pip问题
- kubernetes资源对象kind
热门文章
- 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
- Bootstrap 容器(container)
- 牛客寒假算法基础集训营4
- PyTorch 学习笔记(三):transforms的二十二个方法
- Java 实验5 T3 将十进制转换为二进制
- 一维前缀和(附模板题)
- PyTorch报错“/.../Loss.cu: ... [59,0,0] Assertion input_val >= zero input_val <= one failed.”
- Jacobi matrix——一种对向量方程的梯度描述方式
- Youki的笔记本配置要求
- win10任务栏图标存放路径