设计一个简单的单向链表类模版List,并进行测试。
时间: 2024-03-07 15:48:27 浏览: 68
好的,下面是一个简单的单向链表类模板List的实现,包括节点类Node和链表类List:
```c++
template<class T>
class Node {
public:
T data;
Node<T>* next;
Node() : next(nullptr) {}
Node(const T& d, Node<T>* n = nullptr) : data(d), next(n) {}
};
template<class T>
class List {
public:
List() : head(nullptr) {}
~List() {
Node<T>* p = head;
while (p) {
Node<T>* q = p;
p = p->next;
delete q;
}
}
void push_back(const T& d) {
if (!head) {
head = new Node<T>(d);
tail = head;
} else {
tail->next = new Node<T>(d);
tail = tail->next;
}
}
void traverse() const {
Node<T>* p = head;
while (p) {
std::cout << p->data << " ";
p = p->next;
}
std::cout << std::endl;
}
private:
Node<T>* head;
Node<T>* tail;
};
```
在这个实现中,我们定义了一个节点类Node,其中包含了数据成员data和指向下一个节点的指针成员next。然后,我们定义了链表类List,其中包含了头指针head和尾指针tail,以及三个成员函数:push_back、traverse和析构函数~List()。其中,push_back函数用于将一个元素添加到链表的末尾,traverse函数用于遍历打印链表中的所有元素,析构函数用于在链表对象销毁时释放所有节点的空间。
下面是一个简单的测试代码,用于测试List类的实现:
```c++
int main() {
List<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(3);
l.push_back(4);
l.push_back(5);
l.traverse();
return 0;
}
```
运行结果为:
```
1 2 3 4 5
```
这表明我们的List类实现是正确的。
阅读全文