单链表排序,除了交换他们的数据域来实现。能不能想结构体数组那样,直接交换对象。把单链表的结点给交换了来实现排序啊,求帮助!
#include<iostream>using namespace std;
typedef struct lnode
{
char name;//姓名
int age;//年龄
int data;//学号
lnode *next;
}lnode,*linklist;
void createlist_tou(linklist &l,int n)
{
l=new lnode;
l->next=NULL;
linklist p;
cout<<"请输入单链表,到0为止:"<<endl;
for(int i=n;i>0;i--)
{
p=new lnode;
cin>>p->data>>p->name>>p->age;
p->next=l->next;
l->next=p;
}
}
linklist sort(lnode* l)
{
lnode *s=l->next ,*p;
while(s->next )
{
p=s->next ;
while(p)
{
if(p->age>s->age )//这是通过交换数据域实现的,求大神帮忙,为啥写成lnode *t=p;p=s;s=t;,不能实现交换啊
{
int t=p->age;
p->age=s->age ;
s->age=t;
int t1=p->data;
p->data=s->data ;
s->data=t1;
char t2=p->name;
p->name=s->name;
s->name=t2;
}
p=p->next ;
}
s=s->next ;
}
return l;
}
void display(linklist &l)
{
linklist p;
p=l->next;
while(p!=NULL)
{
cout<<p->data<<" "<<p->name<<" "<<p->age<<" "<<endl;
p=p->next;
}
cout<<endl;
}
void main()
{ int a;
cout<<"请输入链表长度:"<<endl;
cin>>a;
linklist l;
createlist_tou(l,a);cout<<"前插法输出链表:"<<endl;
display(l);
cout<<"降序排列链表为:"<<endl;
l=sort(l);
display(l);
}