67在不在ᰔᩚ 2022-05-06 09:08 采纳率: 50%
浏览 13
已结题

链表内数据的排序问题

为什么我在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;

}

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-05-06 09:58
    关注

    数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 5月6日

悬赏问题

  • ¥15 输入程序运行仿真后,烟雾值不实时检测,变成固定值
  • ¥15 lingo,求错误原因,这段代码哪里不对,求帮助!
  • ¥20 数据排序,可选择排序方向
  • ¥15 修改一下代码,考虑进程到达时间不同的情况
  • ¥15 帮我看看这是个啥题,带解题过程和结果,条件如下FCF = 290471.33 g1 = 15% r = 8% g2 = 4% n = 5
  • ¥15 edem模拟颗粒不显示或者生成失败
  • ¥15 Python代码编写
  • ¥15 php 将rtmp协议转hls协议,无法播放
  • ¥20 python代码编写
  • ¥20 使用MPI广播数据遇到阻塞