用C++在右侧编辑器补充 Node 类代码,实现 main 函数里调用的成员函数。 测试说明 平台会对你编写的代码进行测试: 测试输入:1 2 3 4 5 6 7 8 9 10 8; 预期输出:1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 9 10
时间: 2024-10-16 11:13:36 浏览: 32
在 Node 类中,我们已经有了 `insertAfter` 和 `deleteAfter` 方法的模板实现。为了完成主函数里的调用,我们需要确保链表节点的数据类型一致,并按照题目描述的操作进行。
首先,让我们完善构造函数、复制构造函数(虽然在这里不需要,但如果用于链表的其他功能可能会有用),以及插入和删除方法的实现:
```cpp
template <typename T>
Node<T>::Node(const T &data, Node<T> *next)
: data(data), next(next) {}
template <typename T>
Node<T>::Node(const Node<T> &other)
: data(other.data), next(other.next) {}
template <typename T>
void Node<T>::insertAfter(Node<T> *p) {
if (p != nullptr) {
this->next = p->next;
p->next = this;
} else {
throw std::runtime_error("插入位置无效");
}
}
template <typename T>
Node<T> *Node<T>::deleteAfter() {
if (this->next != nullptr) {
Node<T> *temp = this->next;
this->next = this->next->next;
delete temp;
} else {
throw std::runtime_error("尝试删除空节点");
}
return next;
}
int main() {
// ... 已经有的代码 ...
int search_num = 8; // 搜索的数字
Node<int> *current = &n[0]; // 当前遍历的节点指针
// 插入搜索数字
current->insertAfter(current);
// 删除搜索数字
while (current->nextNode() != nullptr && current->nextNode()->data == search_num) {
current = current->deleteAfter();
}
// 输出删除后的链表
Node<int> *new_current = n[0].nextNode();
while (new_current != nullptr) {
std::cout << new_current->data << ' ';
new_current = new_current->nextNode();
}
return 0;
}
```
在这个版本的代码中,如果插入位置无效或者尝试删除空节点,我们会抛出异常。在 main 函数中,我们先在链表末尾插入搜索数字,然后删除所有找到的该数字,最后输出剩余的链表。
阅读全文