struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead)
{
RandomListNode * newHead=NULL, *newPtr=NULL;
RandomListNode *nowPtr=pHead;
//不能赋值为0,否则特殊指针指向空指针时会出错
int cnt = 1;
map<RandomListNode*, int> node2index;
node2index.clear();
map<int, RandomListNode*> index2node;
index2node.clear();
while(nowPtr != NULL){
if(newHead == NULL){
newHead = new RandomListNode(nowPtr->label);
newPtr = newHead;
node2index[nowPtr] = cnt;
index2node[cnt] = newHead;
cnt++;
}else{
newPtr->next = new RandomListNode(nowPtr->label);
newPtr = newPtr->next;
node2index[nowPtr] = cnt;
index2node[cnt] = newPtr;
cnt++;
}
nowPtr = nowPtr->next;
}
newPtr=newHead;
nowPtr = pHead;
while(nowPtr != NULL){
newPtr->random = index2node[node2index[nowPtr->random]];
nowPtr = nowPtr->next;
newPtr = newPtr->next;
}
return newHead;
}
};
原文:https://www.cnblogs.com/chengsheng/p/10660539.html