为什么我在sort函数中明明定义了tail=head->next,结果还是调试过程中说tail为空指针?
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct inform
{
int num;
struct inform* next;
}*ST,st;
int main(void)
{
void print(ST head);
ST creat(void);
ST sort(ST head, int len);
ST head;
head = creat();
print (head);
sort(head, 5);
print(head);
return 0;
}
ST creat(void)
{
int len;
printf("请输入你想输入的结点个数:len =");
scanf_s("%d",&len);
printf("\n");
int i, val;
ST head = (ST)malloc(sizeof(st));
if (NULL == head)
{
printf("分配失败");
exit(-1);
}
ST tail = head;
tail->next = NULL;
for (i = 0; i < len; i++)
{
printf("请输入第 %d 个学生的信息:",i+1);
scanf_s("%d",&val);
printf("\n");
ST pnew = (ST)malloc(sizeof(st));
pnew->num = val;
tail->next = pnew;
pnew->next = NULL;
tail = pnew;
}
return head;
}
void print(ST head)
{
ST tail;
int i = 1;
tail = head->next;
while (tail != NULL)
{
printf("第 %d 个学生的信息是:",i);
printf("%d \n",tail->num );
tail = tail->next;
i++;
}
return;
}
ST sort(ST head , int len)
{
int i, j;
ST dupli,tail;
tail = head->next;
dupli = tail->next;
for (i = 0; i < len; i++,tail = tail->next )
{
for (j = 0;j < len - i; j++,dupli = dupli->next )
{
if (dupli->next == NULL)
break;
if (dupli->num > tail->num)
{
int t = tail->num ;
tail->num = dupli->num;
dupli->num = t;
}
tail = tail->next;
}
}
return head;
}