题目链接:138. 随机链表的复制 - 力扣(LeetCode)
给你一个长度为 n
的链表,每个节点包含一个额外增加的随机指针 random
,该指针可以指向链表中的任何节点或空节点,请你深拷贝这个链表
非常妙的思路,先用一个哈希表将旧链表的节点和新链表的节点一一对应起来,然后将新链表的节点串起来,对于random可以根据哈希表里面的对应找到新链表里面对应的节点,妙哉
代码语言:javascript复制class Solution {
public:
Node *copyRandomList(Node *head) {
unordered_map<Node *, Node *> hash;
Node *cur = head;
while (cur) {
hash[cur] = new Node(cur->val);
cur = cur->next;
}
cur = head;
while (cur) {
hash[cur]->next = hash[cur->next];
hash[cur]->random = hash[cur->random];
cur = cur->next;
}
return hash[head];
}
};