LeetCode OJ:Copy List with Random Pointer(复制存在随机链接的链表)

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

这题用map做其实比较简单,但是一开始没想明白越想越乱,最后看了下别人的实现,思路还是很清晰的,代码如下所示:

 1 /**
 2  * Definition for singly-linked list with a random pointer.
 3  * struct RandomListNode {
 4  *     int label;
 5  *     RandomListNode *next, *random;
 6  *     RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
 7  * };
 8  */
 9
10 class Solution {
11 public:
12     RandomListNode *copyRandomList(RandomListNode *head) {
13         unordered_map<RandomListNode *, RandomListNode *> m;
14         RandomListNode helper1(0), * p1 = &helper1, helper2(0), *p2 = &helper2;
15         p1->next = head;
16         while(p1->next){
17             p1 = p1->next;
18             RandomListNode * tmpNode = new RandomListNode(p1->label);
19             m[p1] = tmpNode;
20             p2 = p2->next = tmpNode;
21         }
22         p1 = &helper1;
23         while(p1->next){
24             p1 = p1->next;
25             if(p1->random){
26                 m[p1]->random = m[p1->random];
27             }
28         }
29         return helper2.next;
30     }
31 };
时间: 2024-10-13 21:37:07

LeetCode OJ:Copy List with Random Pointer(复制存在随机链接的链表)的相关文章

[leetcode]138. Copy List with Random Pointer复制带有随机指针的链表

public RandomListNode copyRandomList(RandomListNode head) { /* 深复制,就是不能只是复制原链表变量,而是做一个和原来链表一模一样的新链表, 每一个节点都是新建的,而不是指向就节点 这个题的难点在于:随机节点. 随机节点有可能指向后边还没有建立的节点,这就没法指. 方法一:一一对应地记录每个新旧节点的映射关系,在常规节点建立后,就去查哈希表,找到对应 新节点的旧节点的random,就是新节点的random */ if (head==nu

Copy List with Random Pointer复制带有随机指针的链表

这道题目很经典,很多书和OJ里都有.如果初次遇到,一定很难搞定.再看其解法,实在是很惊艳. 有两个可以得到深刻启示的地方: (1)冗余的思想.谈到复制,我们往往都会另起炉灶,而不会原来链表上搞来搞去,感觉很复杂很危险,会一团糟.美错,最危险的地方就是最安全的地方. (2)指针的步伐.这里的指针有一走两步的操作,很容易导致RE.但是否意味着每步都要仔细考虑指针越界?不然,那样程序会写的很累很乱.还是按照最初的想法,谨慎实现之.回头查看特殊情况,例如空指针情况.只有一个节点的情况,用实际用例去测试,

[LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 这道链表的深度拷贝题的难点就在于如何处理随机指针的问题,由于每一个节点都有一个随机指针,这个指针可以为空,也可以指向链表的任意一个节点,如果我们在每生成一个新节点给其随机指

【LeetCode】Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 思路:第一遍正常复制链表,同时用哈希表保存链表中原始节点和新节点的对应关系,第二遍遍历链表的时候,再复制随机域. 这是一种典型的空间换时间的做法,n个节点,需要大小为O(n

leetcode -day8 Copy List with Random Pointer &amp; Single Number I II

五一中间断了几天,开始继续... 1.  Copy List with Random Pointer A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 分析:剑指offer上的一道题目,分三步进行,首先复制每个链表结点

[LeetCode][JavaScript]Copy List with Random Pointer

Copy List with Random Pointer A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. https://leetcode.com/problems/copy-list-with-random-poin

Java for LeetCode 138 Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 解题思路: 我们在Java for LeetCode 133 Clone Graph题中做过图的复制,本题和图的复制十分类似,JAVA实现如下: public Random

leetcode 【 Copy List with Random Pointer 】 python 实现

题目: A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 代码:Runtime: 215 ms 1 # Definition for singly-linked list with a random pointer. 2

leetCode(7):Copy list with random pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. /** * Definition for singly-linked list with a random pointer. * struct RandomListNode