1、不能直接复制节点,需要new新节点再把值复制过去,才算是深拷贝;
2、random指针可能会指向已复制的节点,为了避免创建重复节点,需要用哈希表;
3、递归地复制next和random节点。
class Solution {
public:
unordered_map<Node*, Node*> hash;
Node* copyRandomList(Node* head) {
if (!head) return head;
if (hash.count(head)) return hash[head]; //当前节点已经构造过了,直接返回即可
Node* dummy = new Node(head->val);
hash[head] = dummy;
dummy->next = copyRandomList(head->next);
dummy->random = copyRandomList(head->random);
return dummy;
}
};