题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
#include <iostream>
#include <vector>
using namespace std;
struct RandomListNode{
int label;
struct RandomListNode *next, *random;
RandomListNode(int x):label(x),next(NULL),random(NULL){}
};
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead!=NULL){
RandomListNode *root=new RandomListNode(pHead->label);
RandomListNode *p=pHead->next;
RandomListNode *pre=root;
vector<RandomListNode*> vec1;
vec1.push_back(root);
vector<RandomListNode*> vec2;
vec2.push_back(pHead);
while(p!=NULL){
RandomListNode *node=new RandomListNode(p->label);
pre->next=node;
pre=node;
p=p->next;
vec1.push_back(node);
vec2.push_back(p);
}
int len=vec2.size();
for(int i=0;i<len;i++){
RandomListNode *temp=vec2[i];
if(temp->random!=NULL){
int j;
for(j=0;j<len;j++){
if(temp->random==vec2[j])
break;
}
vec1[i]->random=vec1[j];
}else{
vec1[i]->random=NULL;
}
}
return root;
}else{
return NULL;
}
}
int main(){
system("pause");
}