用C语言来写删除链表中性别为gender(0为男生,1为女生)的所有学生结点,删除成功返回1,否则返回0
时间: 2023-05-24 14:00:47 浏览: 52
以下是删除链表中性别为 gender 的所有学生节点的 C 语言代码:
```c
#include <stdlib.h>
struct student {
int id;
int gender;
struct student *next;
};
int delete_students_by_gender(struct student **head, int gender) {
struct student *curr = *head;
struct student *prev = NULL;
int deleted = 0;
while (curr != NULL) {
if (curr->gender == gender) {
// 删除 curr 节点
if (prev == NULL) {
// curr 是第一个节点
*head = curr->next;
free(curr);
curr = *head;
} else {
prev->next = curr->next;
free(curr);
curr = prev->next;
}
deleted = 1;
} else {
// 保留 curr 节点
prev = curr;
curr = curr->next;
}
}
return deleted;
}
```
这个函数的参数是一个指向指针的指针 `head`,它指向链表的头节点指针。函数首先遍历整个链表,如果发现某个节点的 `gender` 属性等于 `gender` 参数,就将它删除。删除操作分两种情况:
- 如果 curr 是第一个节点,则需要更新 `head` 指针。
- 如果 curr 不是第一个节点,则需要更新前驱节点的 next 指针。
在删除节点之后,将 curr 指向它的下一个节点,然后继续遍历链表。最后,返回值表示是否有节点被删除。