138. Copy List with Random Pointer
Medium
2165531FavoriteShare
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
Example 1:

Input:
{"$id":"1","next":{"$id":"2","next":null,"random":{"$ref":"2"},"val":2},"random":{"$ref":"2"},"val":1}
Explanation:
Node 1's value is 1, both of its next and random pointer points to Node 2.
Node 2's value is 2, its next pointer points to null and its random pointer points to itself.
Note:
- You must return the copy of the given head as a reference to the cloned list.
Accepted
311,451
Submissions
1,016,972
深度拷贝一开始看到这个名词还有点蒙蔽,其实就是把原来的一样复制一遍,考虑到时间复杂度直接用hashset即可
/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node() {}
Node(int _val, Node* _next, Node* _random) {
val = _val;
next = _next;
random = _random;
}
};
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
if (!head) return nullptr;
Node *res = new Node(head->val, nullptr, nullptr);
Node *node = res, *cur = head->next;
unordered_map<Node*, Node*> m;
m[head] = res;
while (cur) {
Node *t = new Node(cur->val, nullptr, nullptr);
node->next = t;
m[cur] = t;
node = node->next;
cur = cur->next;
}
node = res; cur = head;
while (cur) {
node->random = m[cur->random];
node = node->next;
cur = cur->next;
}
return res;
}
};
本文详细解析了一种特殊的链表——包含随机指针的链表的深拷贝实现过程。通过使用哈希表,文章提供了一个高效的时间复杂度解决方案,确保了原链表和拷贝链表的独立性。

被折叠的 条评论
为什么被折叠?



