单链表的复制、深拷贝

用C++写了几个函数,一个小例子来表示单链表的复制过程

//创建链表
struct node
{
	int data;
	node* next;

};
typedef node linklist;
linklist *initLinklist()
{
	linklist *first;
	node *l=new node;
	l->data=1;
	l->next=NULL;
	first=l;
	return first;
}
//在链表第i个节点处插入
bool insertLinklist(linklist* &l,node *p,int i)
{
	int n=0;
	linklist *temp=l;//临时指针
	if(0==i)
	{
		p->next=l;
		l=p;
		cout<<"插入成功";
		return true;
	}
	int count=1;
	while(temp)
	{
		
		if(count==i)
		{
			p->next=temp;
			temp=p;
			cout<<"插入成功";
			return true;
		}
			temp=temp->next;	
			count++;
	}	
	return false;
}
//复制链表
linklist* copyLinklist(linklist *l,linklist *cl)
{
	
	linklist *temp=l;//临时指针,取l的值
	
	linklist *ctemp;
	
	if(l)
	{	//先记录头节点位置
		node *cnode=new node;//临时节点,接受temp的值
		cnode->data=temp->data;
                cnode->next=NULL;
		temp=temp->next;
		
		cl=cnode;
		cout<<"copy"<data;
		ctemp=cl;
		
        while(temp)
		{
		
			node *cnode=new node;//临时节点,接受temp的值
			cnode->data=temp->data;
                        cnode->next=NULL;
			temp=temp->next;
		
			//将临时节点插入到链表;
			ctemp->next=cnode;
			ctemp=cnode;
			cout<<"插入成功";
		}

	}
	else
		cl=NULL;
	
	return cl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	node *p;
	p=new node;
	p->data=2;
	p->next=NULL;
	linklist* l=initLinklist();
	cout<data;
	insertLinklist(l,p,0);
	cout<data;
	linklist *cl=new linklist;
	cl=copyLinklist(l,cl);
	cout<<"复制后";
	cout<data;
	cout<next->data;
}

 

你可能感兴趣的:(数据结构与算法)