In first round, copy the list without regard with random pointer but make a map between the old node and new node.
In the second round, fix the random pointer by the hash mapping.
1: /**
2: * Definition for singly-linked list with a random pointer.
3: * struct RandomListNode {
4: * int label;
5: * RandomListNode *next, *random;
6: * RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
7: * };
8: */
9: class Solution {
10: public:
11: RandomListNode *copyRandomList(RandomListNode *head) {
12: unordered_map<RandomListNode*, RandomListNode*> mp;
13: RandomListNode *dummy = new RandomListNode(-1);
14: RandomListNode *cur = head, *res = dummy;
15: while (cur) {
16: RandomListNode *node = new RandomListNode(cur->label);
17: mp[cur] = node;
18: res->next = node;
19: res = res->next;
20: cur = cur->next;
21: }
22: cur = head;
23: res = dummy->next;
24: while (cur) {
25: if (cur->random != NULL) {
26: res->random = mp[cur->random];
27: }
28: res = res->next;
29: cur = cur->next;
30: }
31: res = dummy->next;
32: delete dummy;
33: return res;
34: }
35: };
No comments:
Post a Comment