(1)编写程序Node.h 实现例9-5的结点类,并编写测试程序lab91.cpp实现链表的基本操作。
时间: 2024-03-05 08:47:27 浏览: 53
以下是Node.h的代码:
```c++
#ifndef NODE_H
#define NODE_H
template <class T>
class Node {
public:
T data;
Node<T>* next;
Node();
Node(const T& item, Node<T>* next = nullptr);
~Node();
};
template <class T>
Node<T>::Node() {
next = nullptr;
}
template <class T>
Node<T>::Node(const T& item, Node<T>* next) {
data = item;
this->next = next;
}
template <class T>
Node<T>::~Node() {}
#endif
```
以下是lab91.cpp的代码:
```c++
#include <iostream>
#include "Node.h"
using namespace std;
template <class T>
void printList(Node<T>* head) {
Node<T>* curr = head;
while (curr != nullptr) {
cout << curr->data << " ";
curr = curr->next;
}
cout << endl;
}
template <class T>
void insert(Node<T>*& head, T data) {
Node<T>* newNode = new Node<T>(data);
newNode->next = head;
head = newNode;
}
template <class T>
void deleteNode(Node<T>*& head, T data) {
Node<T>* curr = head;
Node<T>* prev = nullptr;
while (curr != nullptr && curr->data != data) {
prev = curr;
curr = curr->next;
}
if (curr == nullptr) {
cout << "The data is not in the list." << endl;
return;
}
if (prev == nullptr) {
head = curr->next;
} else {
prev->next = curr->next;
}
delete curr;
}
template <class T>
void reverseList(Node<T>*& head) {
if (head == nullptr || head->next == nullptr) {
return;
}
Node<T>* prev = nullptr;
Node<T>* curr = head;
Node<T>* next = nullptr;
while (curr != nullptr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
int main() {
Node<int>* head = nullptr;
insert(head, 1);
insert(head, 2);
insert(head, 3);
insert(head, 4);
insert(head, 5);
printList(head);
deleteNode(head, 3);
printList(head);
reverseList(head);
printList(head);
return 0;
}
```
在这个测试程序中,我们首先创建一个空的链表,然后通过insert函数向链表中插入一些元素。接着,我们打印出链表中所有元素的值,然后使用deleteNode函数删除链表中的一个元素。最后,我们使用reverseList函数反转整个链表,并再次打印出链表中所有元素的值。