138.随机链表的复制
思路:哈希表(原结点key,新结点value)
1.遍历原链表+创建新结点,放入hash
2.遍历原链表,给新结点添加next和random指针
代码:
class Solution {
public:
Node* copyRandomList(Node* head) {
unordered_map<Node*,Node*>map;
Node* cur=head;
//新旧结点放入哈希表
while(cur!=nullptr){
map[cur]=new Node(cur->val);
cur=cur->next;
}
cur=head;
while(cur!=nullptr){
//不能写map[cur]->next=cur->next;复制链表中的指针都不应指向原链表中的节点 。
map[cur]->next=map[cur->next];//
map[cur]->random=map[cur->random];
cur=cur->next;
}
return map[head];
}
};