用c语言建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等于此年龄,则将此节点删去。
时间: 2023-12-04 22:16:39 浏览: 70
输入年龄,若和链表内节点相同,删除该节点
好的,以下是用C语言实现该问题的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义节点结构体
typedef struct Node {
int id;
char name[20];
char gender;
int age;
struct Node* next;
} Node;
// 插入节点
Node* insertNode(Node* head, int id, char name[], char gender, int age) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->id = id;
strcpy(newNode->name, name);
newNode->gender = gender;
newNode->age = age;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
return head;
}
// 删除节点
Node* deleteNode(Node* head, int age) {
Node* temp = head;
Node* prev = NULL;
while (temp != NULL) {
if (temp->age == age) {
if (prev == NULL) {
head = temp->next;
} else {
prev->next = temp->next;
}
free(temp);
break;
} else {
prev = temp;
temp = temp->next;
}
}
return head;
}
// 输出链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("ID: %d, ", temp->id);
printf("Name: %s, ", temp->name);
printf("Gender: %c, ", temp->gender);
printf("Age: %d\n", temp->age);
temp = temp->next;
}
}
int main() {
Node* head = NULL;
// 插入节点
head = insertNode(head, 1, "Tom", 'M', 20);
head = insertNode(head, 2, "Mary", 'F', 25);
head = insertNode(head, 3, "John", 'M', 30);
head = insertNode(head, 4, "Alice", 'F', 35);
// 输出链表
printf("Before deleting:\n");
printList(head);
// 删除节点
head = deleteNode(head, 30);
// 输出链表
printf("After deleting:\n");
printList(head);
return 0;
}
```
在这段代码中,我们首先定义了一个节点结构体 `Node`,其中包括了学号、姓名、性别和年龄四个成员变量,以及一个指向下一个节点的指针 `next`。接着,我们编写了 `insertNode` 函数,用于向链表中插入节点。在函数中,我们首先创建一个新节点 `newNode`,然后根据链表是否为空来判断是将新节点作为链表的头节点,还是将其插入到链表的尾部。最后,我们返回链表的头节点。
接下来,我们编写了 `deleteNode` 函数,用于从链表中删除年龄等于指定年龄的节点。在函数中,我们首先定义了两个指针 `temp` 和 `prev`,分别指向当前节点和前一个节点。然后,我们使用 `while` 循环遍历整个链表,当遇到年龄等于指定年龄的节点时,我们将其从链表中删除,并释放其内存空间。最后,我们返回链表的头节点。
最后,我们编写了 `printList` 函数,用于输出整个链表中的所有节点。在函数中,我们使用 `while` 循环遍历整个链表,然后输出每个节点的成员变量。
在 `main` 函数中,我们首先定义了链表的头节点 `head`,然后向链表中插入了四个节点。接着,我们输出了整个链表,并调用 `deleteNode` 函数,将年龄等于30的节点从链表中删除。最后,我们再次输出整个链表,来验证删除操作是否成功。
阅读全文