解题思路:
(1)我的笨办法,首先新建一个链表
(2)同时保存原链表的地址映射关系,和新链表的地址序列
(3)最后根据原链表的地址映射,为新链表指定random指针地址
/*
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
*/
class Solution {
public:
RandomListNode* Clone(RandomListNode* pHead) {
if(pHead==NULL)return NULL;
RandomListNode *head = new RandomListNode(pHead->label),*p=head;
vector<RandomListNode*> vH,vR,vP;
vP.push_back(head);
while(pHead->next){
RandomListNode *q = new RandomListNode(pHead->next->label);
vP.push_back(q);
p->next = q;p=q;
vR.push_back(pHead->random);
vH.push_back(pHead);
pHead = pHead->next;
}
vR.push_back(pHead->random);vP.push_back(NULL);
vH.push_back(pHead);vH.push_back(NULL);
for(int i=0;i<vR.size();i++){
int index = find(vH.begin(),vH.end(),vR[i])-vH.begin();
vP[i]->random = vP[index];
}
return head;
}
};