感觉这题简单些,我可能就是移动结点搞不太清,这个可以直接用双重while循环按冒泡排序来搞。
直接上代码了
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{ int data;
struct Node *next;
}LinkList;
LinkList *head,*p,*q;
int m,i,j;
void creatLinkList()
{
p=head=(LinkList*)malloc(sizeof(LinkList));
scanf("%d",&m);//输入节点数
getchar();
for(i=0;i<m;i++)//输入节点数据域的值
{
q=(LinkList*)malloc(sizeof(LinkList));
scanf("%d",&q->data);
p->next=q;
p=p->next;
}
p->next=NULL;
}
void PrintLinkList()
{
p=head->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
void SortLinkList()
{
p=head->next;
while(p)//排序
{
q=p->next;
while(q)
{
if(p->data>q->data)//交换值
{
int t=p->data;
p->data=q->data;
q->data=t;
}
q=q->next;
}
p=p->next;
}
}
int main()
{
creatLinkList();
SortLinkList();
PrintLinkList();
return 0;
}