建立一个链表,每个结点包括:学号,姓名,性别,年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删除
时间: 2024-04-09 18:28:06 浏览: 96
输入年龄,若和链表内节点相同,删除该节点
首先,我们需要定义一个结构体来表示链表中的每个节点,包括学号、姓名、性别和年龄:
```
struct Node {
int id; // 学号
string name; // 姓名
char gender; // 性别
int age; // 年龄
Node* next; // 指向下一个节点的指针
};
```
然后,我们可以定义一个函数来创建链表,并在其中插入节点:
```
Node* createList() {
Node* head = new Node(); // 创建头节点
head->next = NULL; // 头节点的指针为空
int n; // 输入节点个数
cin >> n;
Node* p = head; // 指向当前节点的指针
for (int i = ; i < n; i++) {
Node* node = new Node(); // 创建新节点
cin >> node->id >> node->name >> node->gender >> node->age;
node->next = NULL; // 新节点的指针为空
p->next = node; // 将新节点插入到链表中
p = node; // 将指针指向新节点
}
return head; // 返回头节点
}
```
接下来,我们可以定义一个函数来删除链表中年龄等于给定年龄的节点:
```
void deleteNode(Node* head, int age) {
Node* p = head->next; // 指向第一个节点的指针
Node* pre = head; // 指向前一个节点的指针
while (p != NULL) {
if (p->age == age) { // 如果节点的年龄等于给定年龄
pre->next = p->next; // 将前一个节点的指针指向下一个节点
delete p; // 删除当前节点
p = pre->next; // 将指针指向下一个节点
} else {
pre = p; // 将前一个节点的指针指向当前节点
p = p->next; // 将指针指向下一个节点
}
}
}
```
最后,我们可以在主函数中调用以上两个函数来创建链表并删除节点:
```
int main() {
Node* head = createList(); // 创建链表
int age;
cin >> age;
deleteNode(head, age); // 删除节点
Node* p = head->next; // 指向第一个节点的指针
while (p != NULL) { // 遍历链表并输出每个节点的信息
cout << p->id << " " << p->name << " " << p->gender << " " << p->age << endl;
p = p->next;
}
return ;
}
```
阅读全文