用链表排序,并删除指定数字
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
struct data
{
int vt;
struct data *next;
};
#include<iostream>
#include<stdlib.h>
using namespace std;
struct data
{
int vt;
struct data *next;
};
data *head;
data* insert(data* headt,int N)
{ //printf("<1>\n");
data *listnode,*nodet;
listnode=(data*)malloc(sizeof(data*));
nodet=headt;
listnode->vt=N;
listnode->next=NULL;
if(headt->vt>listnode->vt)
{ //printf("<2>\n");
listnode->next=nodet;
headt=listnode;
return headt;
}
else
{ while(nodet->next!=NULL)
{if(nodet->vt<=listnode->vt&&nodet->next->vt>listnode->vt)
{ //printf("<3>\n");
listnode->next=nodet->next;
nodet->next=listnode;
break;
}
nodet=nodet->next;
//printf("<7>\n");
//for(int i=1;i<=100000000;i++);
/*data *ppt;
ppt=headt;
while(ppt!=NULL)
{
cout<<ppt->vt<<' ';
ppt=ppt->next;
}
cout<<endl;*/
}
//printf("<6>\n");
if(nodet->next==NULL)
{//printf("<4>\n");
nodet->next=listnode;
}
}
//free(listnode);
//printf("<5>\n");
return headt;
}
{ //printf("<1>\n");
data *listnode,*nodet;
listnode=(data*)malloc(sizeof(data*));
nodet=headt;
listnode->vt=N;
listnode->next=NULL;
if(headt->vt>listnode->vt)
{ //printf("<2>\n");
listnode->next=nodet;
headt=listnode;
return headt;
}
else
{ while(nodet->next!=NULL)
{if(nodet->vt<=listnode->vt&&nodet->next->vt>listnode->vt)
{ //printf("<3>\n");
listnode->next=nodet->next;
nodet->next=listnode;
break;
}
nodet=nodet->next;
//printf("<7>\n");
//for(int i=1;i<=100000000;i++);
/*data *ppt;
ppt=headt;
while(ppt!=NULL)
{
cout<<ppt->vt<<' ';
ppt=ppt->next;
}
cout<<endl;*/
}
//printf("<6>\n");
if(nodet->next==NULL)
{//printf("<4>\n");
nodet->next=listnode;
}
}
//free(listnode);
//printf("<5>\n");
return headt;
}
data* remove(data* headt,int N)
{
data *nodet;
nodet=headt;
while(headt->vt==N)
{
nodet=headt->next;
free(headt);
headt=nodet;
}
while(nodet->next!=NULL)
{
if(nodet->next->vt==N)
{
data *pt;pt=nodet->next;
nodet->next=nodet->next->next;
free(pt);
}
else
nodet=nodet->next;
}
return headt;
}
{
data *nodet;
nodet=headt;
while(headt->vt==N)
{
nodet=headt->next;
free(headt);
headt=nodet;
}
while(nodet->next!=NULL)
{
if(nodet->next->vt==N)
{
data *pt;pt=nodet->next;
nodet->next=nodet->next->next;
free(pt);
}
else
nodet=nodet->next;
}
return headt;
}
void output(data* headt)
{ //cout<<"1>>"<<endl;
data *ppt;
ppt=headt;
while(ppt!=NULL)
{
cout<<ppt->vt<<' ';
ppt=ppt->next;
}
cout<<endl;
}
int main()
{
int m,n,mi;
head=(data*)malloc(sizeof(data*));
cin>>n;
cin>>m;
head->vt=m;head->next=NULL;
for(int i=1;i<=n-1;i++)
{
cin>>m;
head=insert(head,m);
}
output(head);
cout<<"输入删除的数:";
cin>>mi;
head=remove(head,mi);
output(head);
data *pt,*pm;
pt=head;pm=pt->next;
while(pt!=NULL)
{
free(pt);
pt=pm;
if(pm!=NULL) pm=pm->next ;
}
return 0;
}
{ //cout<<"1>>"<<endl;
data *ppt;
ppt=headt;
while(ppt!=NULL)
{
cout<<ppt->vt<<' ';
ppt=ppt->next;
}
cout<<endl;
}
int main()
{
int m,n,mi;
head=(data*)malloc(sizeof(data*));
cin>>n;
cin>>m;
head->vt=m;head->next=NULL;
for(int i=1;i<=n-1;i++)
{
cin>>m;
head=insert(head,m);
}
output(head);
cout<<"输入删除的数:";
cin>>mi;
head=remove(head,mi);
output(head);
data *pt,*pm;
pt=head;pm=pt->next;
while(pt!=NULL)
{
free(pt);
pt=pm;
if(pm!=NULL) pm=pm->next ;
}
return 0;
}
特别注意:代码最后删除所有申请的空间;
中间函数基本上就是添加结点删除结点的模板了;