建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等于此年龄,则将此节点删去。
时间: 2023-12-04 17:16:39 浏览: 84
好的,我可以为你演示如何用C++语言实现这个问题。
```c++
#include <iostream>
using namespace std;
// 定义节点结构体
struct Node {
int id;
string name;
char gender;
int age;
Node* next;
};
// 插入节点
Node* insertNode(Node* head, int id, string name, char gender, int age) {
Node* newNode = new Node;
newNode->id = id;
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;
}
delete temp;
break;
} else {
prev = temp;
temp = temp->next;
}
}
return head;
}
// 输出链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
cout << "ID: " << temp->id << ", ";
cout << "Name: " << temp->name << ", ";
cout << "Gender: " << temp->gender << ", ";
cout << "Age: " << temp->age << endl;
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);
// 输出链表
cout << "Before deleting:" << endl;
printList(head);
// 删除节点
head = deleteNode(head, 30);
// 输出链表
cout << "After deleting:" << endl;
printList(head);
return 0;
}
```
在这段代码中,我们首先定义了一个节点结构体 `Node`,其中包括了学号、姓名、性别和年龄四个成员变量,以及一个指向下一个节点的指针 `next`。接着,我们编写了 `insertNode` 函数,用于向链表中插入节点。在函数中,我们首先创建一个新节点 `newNode`,然后根据链表是否为空来判断是将新节点作为链表的头节点,还是将其插入到链表的尾部。最后,我们返回链表的头节点。
接下来,我们编写了 `deleteNode` 函数,用于从链表中删除年龄等于指定年龄的节点。在函数中,我们首先定义了两个指针 `temp` 和 `prev`,分别指向当前节点和前一个节点。然后,我们使用 `while` 循环遍历整个链表,当遇到年龄等于指定年龄的节点时,我们将其从链表中删除,并释放其内存空间。最后,我们返回链表的头节点。
最后,我们编写了 `printList` 函数,用于输出整个链表中的所有节点。在函数中,我们使用 `while` 循环遍历整个链表,然后输出每个节点的成员变量。
在 `main` 函数中,我们首先定义了链表的头节点 `head`,然后向链表中插入了四个节点。接着,我们输出了整个链表,并调用 `deleteNode` 函数,将年龄等于30的节点从链表中删除。最后,我们再次输出整个链表,来验证删除操作是否成功。
阅读全文