leetcode138. 复制带随机指针的链表

分析

将所有节点的信息用哈希表存下来,然后再重新遍历链表,此时所有的节点都已经创建好,可以直接在哈希表中寻找节点信息。

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* next;
    Node* random;
    
    Node(int _val) {
        val = _val;
        next = NULL;
        random = NULL;
    }
};
*/

class Solution {
public:
    Node* copyRandomList(Node* head) {
        Node *cur=head;
        unordered_map<Node*,Node*>map;
        while(cur){
            map.insert({cur,new Node(cur->val)});
            cur=cur->next;
        }
        cur=head;
        while(cur){
            map[cur]->next=map[cur->next];
            map[cur]->random=map[cur->random];
            cur=cur->next;
        }
        return map[head];
    }
};