剑指offer-复杂链表的复制

2016/05/24 C和C++基础

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的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");
}

Search

    Post Directory