这个 stu 结构体是咋样的?代码里几个问题,如果判断 head == NULL 条件成立,链表为空,此时应 return; 返回上级函数。后面删除里,prev应是前置指针,所以prev = temp; temp = temp->next; 两句互换位置才行。
整体修改如下,供参考:
void del()
{
int num;
if (head == NULL) {
printf("无学生信息,链表为空!\n");
return;
}
printf("请输入需要删除的学生学号:\n");
scanf_s("%d", &num);
stu* temp = head;
stu* prev = temp;
while (temp != NULL) {
if (temp->id == num) {
if (prev == head)
head = head->next;
else
prev->next = temp->next;
free(temp);
printf("学生信息删除成功!\n");
return;
}
else {
prev = temp;
temp = temp->next;
}
}
printf("未找到该学生!\n");
}