LeetCode 138 | 复制带随机指针的链表
题目
题解
- 用map给新申请的结点和原结点建立意义对应的关系,之后一次遍历map通过first(原结点)方便对second(新建的结点)修改。
/*
// 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)return nullptr;
auto p=head;
//建立map,建立对应关系
map<Node*,Node*> mp;
while(p){
mp.insert(make_pair(p,new Node(p->val)));
p=p->next;
}
//遍历map修改second的两个域指针
for(auto &c:mp){
//新结点的next域等于该pair的原结点对应的next指向的对象为索引的对象。
c.second->next=mp[c.first->next];
//同上思想
c.second->random=mp[c.first->random];
}
return mp[head];
}
};