用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"<<cl->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<<l->data;
insertLinklist(l,p,0);
cout<<l->data;
linklist *cl=new linklist;
cl=copyLinklist(l,cl);
cout<<"复制后";
cout<<cl->data;
cout<<cl->next->data;
}