Hard-题目20:138. Copy List with Random Pointer

原创 2016年05月31日 23:34:06

题目原文:
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.
题目大意:
深度拷贝一个链表,这个链表是普通单链表的基础上增加了一个random指针,可能指向链表的任何一个节点,故称为随机链表。
题目分析:
要遍历两遍原链表,第一遍不带random节点复制原链表,并用一个哈希表建立原链表和新链表的映射关系,其中原链表的第i个节点是key,新链表的第i个节点是value(想想为什么不能反过来?)。扫第二遍的时候复制random节点,原链表和新链表同时从头开始扫,令新链表当前节点的random值等于原链表random在哈希表中的映射。总复杂度O(n).
源码:(language:cpp)

class Solution {
public:
    RandomListNode *copyRandomList(RandomListNode *head) {
        map<RandomListNode *,RandomListNode *> m;
        m[NULL]=NULL;
        RandomListNode *t=new RandomListNode(0);
        RandomListNode *p1=head,*p2=t;

        while(p1)
        {
            p2->next=new RandomListNode(p1->label);
            m[p1]=p2->next;
            p1=p1->next;
            p2=p2->next;
        }
        p1=head;
        p2=t->next;
        while(p1)
        {
            p2->random=m[p1->random];
            p1=p1->next;
            p2=p2->next;    
        }
        p2=t->next;
        return p2;
    }
};

成绩:
128ms,beats 19.31%,众数108ms,19.45%
Cmershen的碎碎念:
一开始我的思路是用一个哈希表把链表的每个节点映射到[1,length]中,然后也是第一遍复制不带random的,第二遍并行扫两个链表,得到原来的random指向的“下标”,再在新链表里面从头开始找,但这样的时间复杂度就为O(n2)了,不可取。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

【LeetCode-面试算法经典-Java实现】【138-Copy List with Random Pointer(拷贝有随机指针的单链表)】

【138-Copy List with Random Pointer(拷贝有随机指针的单链表)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  A linked list ...

138. Copy List with Random Pointer

题目 复制带有随机指针的链表:一个单链表除了next指针外还有一个random指针随机指向任何一个元素(可能为空)  《剑指offer》上的面试题26 分析 方法一:  map,先按...

leetcode题解-138. Copy List with Random Pointer

题目:A linked list is given such that each node contains an additional random pointer which could poin...

【leetcode每日一题】138.Copy List with Random Pointer

题目: A linked list is given such that each node contains an additional random pointer which could ...

LeetCode 138. Copy List with Random Pointer

和LeetCode 133. Clone Graph一个意思, 深层拷贝意味着,对a进行拷贝,获得b, 使得b的成员变量不仅值与a中对应的成员变量相等,同时它们指向不同的内存空间。 维护一张map, ...

[Leetcode] 138. Copy List with Random Pointer 解题报告

题目: A linked list is given such that each node contains an additional random pointer which coul...

leetcode_138 Copy List with Random Pointer

题目分析:给定一个特殊的单链表,链表的每一个节点多了一个随机指针域,随机指向链表中的某一个节点。要求复制这个链表 解题思路:1)复制节点,并将拷贝后的节点插入到原节点的后面;2)更新所有复制的节点的r...

[leetcode] 138. Copy List with Random Pointer 解题报告

题目链接:https://leetcode.com/problems/copy-list-with-random-pointer/ A linked list is given such that...

Leetcode 133. Clone Graph & 138. Copy List with Random Pointer

因为自己是先做的138,先说138。 138. Copy List with Random Pointer Total Accepted: 64859 Total Submissions:...

Leetcode-138. Copy List with Random Pointer

题目A linked list is given such that each node contains an additional random pointer which could point...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hard-题目20:138. Copy List with Random Pointer
举报原因:
原因补充:

(最多只允许输入30个字)