Leetcode 138. Copy List with Random Pointer (Hard) (cpp)
Tag: Hash Table, Linked List
Difficulty: Hard
/*
138. Copy List with Random Pointer (Hard)
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.
*/
/**
* Definition for singly-linked list with a random pointer.
* struct RandomListNode {
* int label;
* RandomListNode *next, *random;
* RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
* };
*/
class Solution {
public:
RandomListNode *copyRandomList(RandomListNode *head) {
if (head == NULL) {
return NULL;
}
RandomListNode *newhead = new RandomListNode(head->label);
RandomListNode *cur = newhead;
unordered_map<RandomListNode*, RandomListNode*> mapping;
mapping[head] = newhead;
while (head != NULL) {
if (head->next != NULL) {
if (mapping.find(head->next) == mapping.end()) {
RandomListNode *next = new RandomListNode(head->next->label);
mapping[head->next] = next;
}
cur->next = mapping[head->next];
}
if (head->random != NULL) {
if (mapping.find(head->random) == mapping.end()) {
RandomListNode *random = new RandomListNode(head->random->label);
mapping[head->random] = random;
}
cur->random = mapping[head->random];
}
head = head->next;
cur = cur->next;
}
return newhead;
}
};