用c写一个单链表的函数名为DeleteFail删除成绩不及格的学生
时间: 2023-05-31 15:03:19 浏览: 95
假设单链表的结构体定义如下:
```
typedef struct student {
int id; // 学生编号
char name[20]; // 学生姓名
float score; // 学生成绩
struct student *next; // 指向下一个结点的指针
} Student;
```
则可以写出删除不及格学生的函数如下:
```
void DeleteFail(Student **head) {
Student *p = *head; // 指向头结点
Student *pre = NULL; // 指向当前结点的前一个结点
while (p != NULL) {
if (p->score < 60.0) { // 成绩不及格
if (pre == NULL) { // 如果是头结点
*head = p->next; // 更新头结点
} else {
pre->next = p->next; // 删除当前结点
}
free(p); // 释放当前结点的空间
p = (pre == NULL ? *head : pre->next); // 继续遍历
} else {
pre = p; // 更新前一个结点
p = p->next; // 继续遍历
}
}
}
```
该函数使用了双指针法,通过遍历链表,找到不及格的学生结点并删除,同时更新前一个结点和头结点的指针。注意需要在删除结点之前先保存下一个结点的指针,否则会导致链表断裂。
阅读全文