# include<stdio.h>
# include<stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
struct ListNode *readlist(){
struct ListNode *L ;
struct ListNode *p;
int i = 1;
int n;
scanf("%d",&n);
while(n!=-1){
struct ListNode *s = (struct ListNode *)malloc(sizeof(struct ListNode));
s->next = NULL;
s->data = n;
if(i == 1){
L = s;
p = s;
}
else{
p->next = s;
p = s;
}
i++;
scanf("%d",&n);
}
return L;
}
void Sort(struct ListNode **L){
int count = 0;
struct ListNode *p = *L;
while(p!=NULL){
count++;
p=p->next;
} // 5 4 3 2 1
printf("count:%d\n",count);
for(int i = 0;i<count-1;i++){ //控制多少次
struct ListNode *p = *L;
struct ListNode *q = p->next;
int m = count-i-1; //****** 交换操作到那一位置
while(m--){ //
if(p->data < q->data){
int temp = p->data;
p->data = q->data;
q->data = temp;
}
p = q;
q = q->next;
}
}
}
int main()
{
struct ListNode *L;
L = readlist();
Sort(&L);
printlist(L);
return 0;
}
The idea is the same as array bubbling.