题目链接: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.

这道题的要求是对一个节点具有随机指针的链表进行深拷贝。

Clone Graph类似的题目,同样是用hash表将链表中节点与深拷贝的对应的节点关联起来。

时间复杂度:O(n)

空间复杂度:O(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution
{
public:
    RandomListNode *copyRandomList(RandomListNode *head)
    {
        if(head == NULL)
            return NULL;
        
        unordered_map<RandomListNode *, RandomListNode *> m;
        m[head] = new RandomListNode(head -> label);
        for(RandomListNode *p = head; p -> next != NULL; p = p -> next)
        {
            m[p -> next] = new RandomListNode(p -> next -> label);
            m[p] -> next = m[p -> next];
        }
        
        for(RandomListNode *p = head; p != NULL; p = p -> next)
            m[p] -> random = m[p -> random];
        
        return m[head];
    }
};