1:Linklist * inserSort(Linklist *L) /*函数参数是一个链表的指针L,返回的也是这个指针,是排序好了的链表。*/
2:{
3: Linklist *p=L->next;/*p指向链表第一个节点。*/
4: Linklist *r;
5: Linklist *q;
6: int i;
7: int j;
8: int x;
9: int n=lengList(L);/*获取链表的节点总个数,存入n。*/
10: for(i=1;i<n;i++)/*这个for循环配合23行,让p依次指向链表的第1个节点到倒数第2个节点。
这显而易见啊:循环了n-1次,每次都执行23行“p=p->next”。*/
11: {
12: q=p->next;/*让q指向p的下一个节点*/
13: for(j=i+1;j<=n;j++)/*12行、这行的for循环和21行,让q依次指向p之后的节点一直到链表末尾。*/
14: {
15: if(p->data>q->data) /*看p中的数据是否比q中的大*/
16: {
17: x=p->data; /*这17,18,19三行是交换pq两节点的数据*/
18: p->data=q->data; /**/
19: q->data=x; /**/
20: }
21: q=q->next;
22: }
23: p=p->next;
24: }
25: return L;
26:}
以下是上面解释的动态例子:括号中是链表节点的数据,***4个节点,用1234标明。
1(5)->2(8)->3(2)->4(7)
i=1时:p->1(5)
j=2时:
p->1(5),q->2(8),if不成立,q->3(2)
j=3时:
p->1(5),q->3(2),if成立,交换,链表为1(2)->2(8)->3(5)->4(7),q->4(7)
j=4时:
p->1(2),q->4(7),if不成立q->5(null)
i=2时: p->2(8)
j=3时:
p->2(8),q->3(5),if成立,交换,链表为1(2)->2(5)->3(8)->4(7),q->4(7)
j=4时:
p->2(5),q->4(7),if不成立,q->5(null)
i=3时:p->3(8)
j=4时:
p->3(8),q->4(7),if成立,交换,链表为1(2)->2(5)->3(7)->4(8),q->5(null)
至此,排序流程走完,链表从5827排成了2578。
很不好意思,笔者由于重重原因现在仅能完成第一部分,希望能帮上你。