#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int num;
struct node *next;
}node;
struct node* creat(){
node *L;
L=(node*)malloc(sizeof(node));
L->next=NULL;
return L;
}
struct node *in(node *L){
node *p;
int x;
printf("Enter a bunch of x(x>0):");
scanf("%d",&x);
while(x>0){
p=(node*)malloc(sizeof(node));
p->num=x;
p->next=L->next;
L->next=p;
scanf("%d",&x);
}
return L;
}
struct node *reset(node *L){
int i,j,n=0,temp;
node *p,*s;
p=L->next;
while(p){
n++;
p=p->next;
}
for(i=1;i<n;i++){
for(j=0,p=L->next;j<n-i;j++,p=p->next){
if(p->num>p->next->num){
temp=p->num;
p->num=p->next->num;
p->next->num=temp;
}
}
}
return L;
}
void print(node *L){
node *p;
p=L->next;
while(p){
printf("->%d",p->num);
p=p->next;
}
printf("\n");
}
int main()
{
node *L;
L=creat();
L=in(L);
printf("排序前:");
print(L);
L=reset(L);
printf("排序后:");
print(L);
return 0;
}
单链表的排序,就简单的结合了单链表的特征和冒泡排序结合,这种简单的数据域不需要把节点拆下来再放回去,直接对数据域进行交换即可。
(个人的想法观点不妥之处大佬指点,轻喷!)