2024每日刷题(129)
Leetcode—138. 随机链表的复制
实现代码
/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head == nullptr) {
return nullptr;
}
unordered_map<Node*, Node*> map;
Node* cur = head;
while(cur != nullptr) {
Node* s = new Node(cur->val);
map[cur] = s;
cur = cur->next;
}
cur = head;
while(cur != nullptr) {
map[cur]->next = map[cur->next];
map[cur]->random = map[cur->random];
cur = cur->next;
}
return map[head];
}
};
运行结果
递归实现
/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head == nullptr) {
return nullptr;
}
if(const auto it = map.find(head); it != map.cend()) {
return it->second;
}
Node* newNode = new Node(head->val);
map[head] = newNode;
newNode->random = copyRandomList(head->random);
newNode->next = copyRandomList(head->next);
return newNode;
}
private:
unordered_map<Node*, Node*> map;
};
运行结果
cend()
C++的if里面可以有分号
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!