C语言链表节点删除,出现程序崩溃,删除节点失败???

#include<stdio.h>
#include<malloc.h>
typedef struct student{
    int ID;
    char name[100];
    int grades;
    struct student *next;
}student,*stu;

student *InitList_Sq(stu curr);
student *CreateList_Sq(stu head,int n);
void ShowList_Sq(stu head);
student *DeleteList_Sq(stu head,int mink,int maxk);

int main()
{
    stu head=NULL;
    int n;
    printf("请输入元素的个数:");
    scanf("%d",&n);
    head=CreateList_Sq(head,n);
    printf("请输入删除学号的范围mink和maxk:");
    int mink,maxk;
    scanf("%d%d",&mink,&maxk);
    head=DeleteList_Sq(head,mink,maxk);
    ShowList_Sq(head);
    return 0;
}

student *InitList_Sq(stu curr)
{
    curr=(stu)malloc(sizeof(student));
    if(!curr)    return NULL;
    printf("请输入学号、姓名、成绩:");
    //scanf("%d%s%d",&curr->ID,curr->name,&curr->grades);
    scanf("%d",&curr->ID);
    curr->next=NULL;
    return curr;
}

student *CreateList_Sq(stu head,int n)
{
    stu curr=NULL,tmp=NULL;
    int i;
    for(i=0;i<n;i++)
    {
        curr=InitList_Sq(curr);
        if(head==NULL)
            head=curr;
        else
            tmp->next=curr;
        tmp=curr;
    }
    return head;
}
void ShowList_Sq(stu head)
{
    stu curr=head;
    printf("学号\t姓名\t成绩\n");
    while(curr)
    {
        printf("%d\t%s\t%d\n",curr->ID,curr->name,curr->grades);
        curr=curr->next;
    }
}
//删除链表某个节点;程序运行时输出崩溃??
student *DeleteList_Sq(stu head,int mink,int maxk)
{
    stu curr=head,pre=NULL,tmp=NULL;
    while(curr)
    {
        tmp=curr->next;
        if(tmp->ID==mink)
        {
            curr->next=tmp->next;
            free(tmp);
        }
        curr=curr->next;
    }
    return head;
}
阅读 3.2k
2 个回答
新手上路,请多包涵

CreateList_Sq你确定这个能成功吗?
在delete之前,你先show一把看看

废话少说看代码

while (curr->next != NULL) {//重点在这里
        tmp = curr->next;
        if (tmp->ID == mink) {

            curr->next = tmp->next;

            free(tmp);

        }
        curr = curr->next;
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进