)建立一个链表,每个节点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等于此年龄,则将此节点删去。
时间: 2024-03-14 16:47:05 浏览: 121
好的,我理解了你的问题。下面是一个简单的 C++ 代码实现。
```cpp
#include <iostream>
#include <string>
using namespace std;
// 定义链表节点结构体
struct Student {
int num;
string name;
char sex;
int age;
Student *next;
};
// 创建链表函数
Student *createList() {
int n;
cout << "请输入链表节点个数: ";
cin >> n;
Student *head = new Student; // 创建头节点
Student *p = head; // 定义指向链表结点的指针p
for (int i = 0; i < n; i++) {
Student *node = new Student; // 创建新结点
cout << "请输入第" << i+1 << "个节点的信息: " << endl;
cout << "学号: ";
cin >> node->num;
cout << "姓名: ";
cin >> node->name;
cout << "性别: ";
cin >> node->sex;
cout << "年龄: ";
cin >> node->age;
node->next = NULL; // 新结点的next初始化为NULL
p->next = node; // 将新结点添加到链表尾部
p = node; // 更新p指针,指向链表的最后一个结点
}
return head; // 返回头节点指针
}
// 删除年龄等于指定值的节点
void deleteNode(Student *head, int age) {
Student *p = head->next; // 定义指向链表结点的指针p,从第一个结点开始遍历
Student *pre = head; // 定义指向链表结点的指针pre,指向p的前一个结点
while (p != NULL) {
if (p->age == age) {
pre->next = p->next; // 将前一个结点的next指向p的下一个结点
delete p; // 释放p指向的结点
p = pre->next; // 更新p指针,继续遍历链表
} else {
pre = p; // 更新pre指针
p = p->next; // 更新p指针
}
}
}
// 输出链表函数
void printList(Student *head) {
Student *p = head->next; // 定义指向链表结点的指针p,从第一个结点开始遍历
while (p != NULL) {
cout << "学号: " << p->num << " ";
cout << "姓名: " << p->name << " ";
cout << "性别: " << p->sex << " ";
cout << "年龄: " << p->age << " ";
cout << endl;
p = p->next; // 更新p指针,继续遍历链表
}
}
int main() {
Student *head = createList();
cout << "删除年龄为: ";
int age;
cin >> age;
deleteNode(head, age);
cout << "删除后的链表为: " << endl;
printList(head);
return 0;
}
```
以上代码中,`createList()` 函数用于创建链表,`deleteNode()` 函数用于删除年龄等于指定值的节点,`printList()` 函数用于输出链表。在 `main()` 函数中,我们首先调用 `createList()` 函数创建链表,然后输入要删除的年龄,调用 `deleteNode()` 函数删除年龄等于指定值的节点,最后调用 `printList()` 函数输出链表。
阅读全文