单链表的冒泡排序,该怎么解决

单链表的冒泡排序
#include<stdio.h> 
#include<stdlib.h> 
#define datatype1 int 
#define null 0 
#define end -1 
#define d "%d" 
#define len sizeof(linklist) 
typedef struct node 

datatype1 data; 
struct node *next; 
}linklist; 
/*头插入法建表函数*/ 
linklist *creatlinkh() 

linklist *t,*head; 
datatype1 x; 
t=(linklist *) malloc(len); 
t->next=null;head=t; 
printf("请有序输入数据:\n"); 
scanf(d,&x); 
while(x!=end) 
{ t=(linklist *) malloc(len); 
t->data=x; 
t->next=null; 
t->next=head->next; 
head->next=t; 
scanf(d,&x); 

return(head); 
}

已经建立了单链表。
查了资料还是不知怎么样来用冒泡排序来排输入的数据

有谁能帮一下我555555555555

------解决方案--------------------
这是个简单的问题,最好自己看书。
------解决方案--------------------
很简单的问题啊,你要理解冒泡法的实质是相邻的两个数据符合一个固定的规则,这样通过一次冒泡过程,则该规则下的一个最值就到了链表的最后一个了。即在一次冒泡过程中只存在相邻的两个数据进行交换,一次冒泡过程的一个位置最多进行一次交换。
所以在单链表的冒泡算法中,你要涉及到这样的一些过程量
1.链表头
2.已经排序的子链表头
3.当前节点位置
4.下一节点位置
大致过程是:
(1)判断链表头是否=已排序子链表头(是则表示已经完成排序)
(2)当前节点=链表头
(3)判断当前节点的下节点是否=已排序子链表头
或者为空(是则结束本次冒泡过程,设置子链表头为当前节点指针,重新进入(1)开始下次冒泡)
(4)按规则比较当前节点数值和下一节点数值,如果符合规则,则当前节点指针指向下一节点,否则则交换两个节点数据,前节点指针指向下一节点,重新进入(3)。
这上面(1)-(4)是整个过程,(3)-(4)是一次冒泡过程中的具体步骤。