(1)参照例9-5中结点类Node的声明(9_5.h),给出其实现。在测试程序中从键盘输入10个整数,用这些整数值作为结点数据,生成一个链表,按顺序输出链表中结点的数值。然后从键盘输入一个待查找整数,在链表中查找该整数,若找到则删除该整数所在的结点(如果出现多次,全部删除),然后输出删除结点以后的链表。在程序结束之前清空链表。
时间: 2024-02-15 08:04:44 浏览: 46
Node的实现代码如下:
```cpp
#include<iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int data): data(data), next(nullptr) {}
};
```
生成链表和输出链表的代码如下:
```cpp
int main() {
Node* head = nullptr;
Node* tail = nullptr;
int n;
for (int i = 0; i < 10; i++) {
cin >> n;
Node* node = new Node(n);
if (tail == nullptr) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
Node* p = head;
while (p != nullptr) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
// ...
return 0;
}
```
接下来是删除结点的代码。我们可以先遍历一遍链表,找到要删除的结点,然后再遍历一遍链表,将要删除的结点全部删除。删除结点时需要注意,如果要删除的结点是头结点,则需要特殊处理。
```cpp
int main() {
// ...
int x;
cin >> x;
Node* prev = nullptr;
Node* curr = head;
while (curr != nullptr) {
if (curr->data == x) {
if (prev == nullptr) {
head = curr->next;
delete curr;
curr = head;
} else {
prev->next = curr->next;
delete curr;
curr = prev->next;
}
} else {
prev = curr;
curr = curr->next;
}
}
p = head;
while (p != nullptr) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
// ...
return 0;
}
```
最后是清空链表的代码。我们可以遍历链表,依次删除每个结点,直到链表为空。
```cpp
int main() {
// ...
Node* p = head;
while (p != nullptr) {
Node* q = p;
p = p->next;
delete q;
}
head = nullptr;
tail = nullptr;
// ...
return 0;
}
```
完整代码如下: