【1】语法与逻辑上的问题。for循环里面循环条件判断有误,导致指针直到空还进行-》next操作。
【2】
t=p->data;
p->data=k->data;
p->data=t;
这样的结果相当于没有进行交换。自己对比如下修改后的代码就知道问题出在哪里了。
#include "stdio.h"
#include "malloc.h"
struct str
{
int data;
struct str *next;
};
void ksort(struct str *c) //排序函数
{
struct str *p,*k;
k=p=c;
int len=5;
int t;
for(; p!=NULL;p=p->next)
{
k = p;
for(; k!=NULL;k=k->next)
{
if(p->data > k->data)
{
t=p->data;
p->data=k->data;
k->data=t;
}
}
}
p = c;
for(;p!=NULL;p=p->next)
{
printf("%d ",p->data);
}
}
void main()
{
int val;
int len=5;
struct str *p=NULL,*a=NULL,*b=NULL;
for(int i=1;i<=len;i++)
{
scanf("%d",&val);
p=(struct str *)malloc(sizeof(struct str));
p->data=val;
p->next=NULL;
if(a==NULL)
a=p;
else
b->next=p;
b=p;
}
for(b=a;b!=NULL;b=b->next)
{
printf("%d ",b->data);
}
printf("\n--------");
ksort(a);
free(p);
}