请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
方法一:递归,用一个散哈希表将拷贝的链表与原链表一一对应,递归时用哈希表判断当前节点的拷贝是否已经创建,如果没有创建则创建,如果已经创建,则返回拷贝链表的指针
class Solution {
public:
unordered_map<Node*,Node*> map1;
Node* copyRandomList(Node* head) {
if(head == nullptr){
return nullptr;
}
if(!map1.count(head)){
Node* newnode = new Node(head->val);
map1[head] = newnode;
newnode->next = copyRandomList(head->next);
newnode->random = copyRandomList(head->random);
}
return map1[head];
}
};
方法二: