Leetcode 138. 复制带随机指针的链表 解题思路及C++实现
解题思路:
主要包括三步。
第一步是遍历一次链表,复制其每一个节点,并将所复制的节点接在其后。
第二步是遍历一次链表,解决拷贝节点的random指针的指向。
第三步是从这个大链表中,拆出原有链表和拷贝链表。
具体图解,课参考LeetCode官方图解。
/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node* random;Node() {}Node(int _val, Node* _next, Node* _random) {val = _val;next = _next;random = _random;}
};
*/
class Solution {
public:Node* copyRandomList(Node* head) {if(!head) return head;Node* tmp = head;//遍历链表,复制每一个节点,并将其放在所复制节点之后while(tmp){Node* hh = new Node(tmp->val);hh->next = tmp->next;tmp->next = hh;tmp = hh->next;}tmp = head;//遍历链表,使得复制的节点的random指针指向正确的节点while(tmp){if(tmp->random == NULL) tmp->next->random = NULL;else tmp->next->random = tmp->random->next;if(tmp->next)tmp = tmp->next->next;else tmp = NULL;}Node* res = head->next;// tmp 记录原始的链表节点,tmp2记录新复制的链表节点tmp = head; Node* tmp2 = head;while(tmp){tmp2 = tmp->next;tmp->next = tmp2->next;tmp = tmp->next;if(tmp) tmp2->next = tmp->next;else tmp2->next = NULL;}return res;}
};
Leetcode 138. 复制带随机指针的链表 解题思路及C++实现相关推荐
- LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)
1. 题目 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深拷贝. <剑指Offer>同题:面试题35. 复杂链表的复制 2 ...
- LeetCode 138 复制带随机指针的链表-中等
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点. 构造这个链表的 深拷贝. 深拷贝应该正好由 n 个 全新 节点组成,其中每个新 ...
- LeetCode 138 复制带随机指针的链表
题目描述 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深拷贝. 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表.每个节点 ...
- 138. 复制带随机指针的链表 golang
138. 复制带随机指针的链表 这个题结构体特殊,需要更改上一篇博客的node结构体 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深 ...
- leetcode 138. Copy List with Random Pointer | 138. 复制带随机指针的链表(复杂链表的复制)
题目 https://leetcode.com/problems/copy-list-with-random-pointer/ 题解 复杂链表的复制,经典问题,考察与 HashMap 的结合.注意如果 ...
- 138. 复制带随机指针的链表
链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/ https://www.jiuzhang.com/solution ...
- 【刷题日记】3.复制带随机指针的链表
目录 一.题目介绍 编辑 二.题目分析 三.代码实现 题目链接:138. 复制带随机指针的链表 - 力扣(LeetCode) 一.题目介绍 我们最一开始看到题目可能会没有思路,或者压根就不知道如何下 ...
- M1: 复制带随机指针的链表
一个链表问题:复制带随机指针的链表 题目:有一个链表L,其每个节点有2个指针,一个指针next指向链表的下个节点,另一个random随机指向链表中的任一个节点,可能是自己或者为空,写一个程序,要求复制 ...
- 【力扣】复制带随机指针的链表题解 C语言实现
前言 这是力扣里的一道经典链表题,据说掌握此题你对链表的理解能力就是优秀水平了 题目 /*** Definition for a Node.* struct Node {* int val;* str ...
最新文章
- java三级考试_java web 学习 --第五天(Java三级考试)
- windows命令行无法启动redis_Win10 3分钟简单、快速安装Redis
- Ajax同步调用 异步排序
- C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
- php代码格式化工具 php-cs-fixer的使用
- 知识图谱最新权威综述论文解读:关系抽取
- Redis-集群监控之Redis monitor
- 4固定在底部_有线鼠标之灵魂伴侣,火线竞技4号RGB鼠标线夹
- 架构模式: 服务器端页面碎片化元素构建
- CCF NOI1058 统计单词
- 在win7在结构cocos2d-x v3.2rc0开发环境(For Android)
- 音响发烧友---HiFi音频功放
- win10 电脑桌面任务栏点击无反应
- Java教学视频全集,活见久
- 创建高保真的移动Demo(工具篇)
- 使用canvas绘制笑脸
- python写入excel怎么跨列居中_python文件读写(三)-Excel表格三剑客xlwt,xlrd,xlutils...
- 测试工程师面试题mysql_测试工程师sql笔试题都在这里了!
- JAVA Spring
- (转)网上摘抄:计算数学研究方向及网上资料
热门文章
- wxpython 安装_下载和安装wxPython
- linux下的trap命令
- 搭建mongodb分片
- Asp.Net Core 之 appsettings.json
- ubuntu 下安装 activate-power-mode
- 工厂三兄弟之简单工厂模式(二)
- datagridview当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。
- 高通msm8994启动流程简介
- [驱动注册]platform_driver_register()与platform_device_register()
- matlab intergral,matlab學習:人臉識別之HOG(Histograms of Oriented Gradients)