2)建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等于此年龄,则将此节点删去。用C语言进行解答
时间: 2024-03-02 19:48:11 浏览: 65
以下是用C语言实现的链表节点的定义:
```c
typedef struct Node {
int id; // 学号
char name[20]; // 姓名
char gender; // 性别
int age; // 年龄
struct Node* next; // 指向下一个节点的指针
} Node;
```
接下来,我们可以编写一个函数来删除链表中所有年龄等于给定年龄的节点:
```c
void deleteNodesByAge(Node** head, int age) {
Node* prev = NULL;
Node* curr = *head;
while (curr != NULL) {
if (curr->age == age) {
// 如果当前节点的年龄等于给定年龄,则删除当前节点
if (prev == NULL) {
// 如果当前节点是头节点,则更新头指针
*head = curr->next;
} else {
// 否则,更新前一个节点的指针
prev->next = curr->next;
}
free(curr);
curr = (prev == NULL ? *head : prev->next);
} else {
// 否则,继续遍历下一个节点
prev = curr;
curr = curr->next;
}
}
}
```
该函数会遍历整个链表,如果当前节点的年龄等于给定年龄,则删除当前节点。删除节点时,需要更新前一个节点或头指针的指针,同时释放当前节点的内存。最后,返回新的头指针。
阅读全文