题目:
最开始我本想用BFS,但其实没这么麻烦,用哈希表存储映射关系即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| #include <stddef.h> #include <unordered_map>
using std::unordered_map; 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) {
unordered_map<Node *, int> original_nodemap; unordered_map<int, Node *> new_nodemap; Node *p = head, *new_head = new Node(-1), *q = new_head;
int i = 0; while (p != NULL) { q->next = new Node(p->val); q = q->next; new_nodemap[i] = q; original_nodemap[p] = i; i++; p = p->next; }
q = new_head; new_head = new_head->next; delete q;
q = new_head; p = head; while (q != NULL && p != NULL) { if (p->random == NULL) { q->random = NULL; } else { q->random = new_nodemap[original_nodemap[p->random]]; }
q = q->next; p = p->next; }
return new_head; } };
|