哈希:
/*
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
*/
class Solution {
public:
map<RandomListNode*,int> m;
vector<RandomListNode> v;
RandomListNode* solve(RandomListNode* p){
if(p == NULL) return NULL;
if(m[p] == 0){
int L = v.size();
RandomListNode t(p->label);
v.push_back(t);
m[p] = L+1; // m : L+1
v[L].next = solve(p->next);
v[L].random = solve(p->random);
return &v[L];
}else{
return &v[m[p]-1];
}
}
RandomListNode* Clone(RandomListNode* pHead)
{
RandomListNode* ans = solve(pHead);
return ans;
}
};