方法:回溯 + 哈希表
对于当前节点,我们首先要进行拷贝,然后我们进行「当前节点的后继节点」和「当前节点的随机指针指向的节点」拷贝,拷贝完成后将创建的新节点的指针返回,即可完成当前节点的两指针的赋值。
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head == nullptr) return nullptr;
unordered_map<Node*,Node*> map;
Node * cur = head;
//给value node赋值
while(cur) {
map[cur] = new Node(cur -> val);
cur = cur -> next;
}
cur = head;
//给value node的next和radom赋值
while(cur) {
map[cur]->next = map[cur->next];
map[cur]->random = map[cur->random];
cur = cur -> next;
}
return map[head];
}
};