帮我写一个单链表模板程序
时间: 2023-08-28 15:31:28 浏览: 39
好的,以下是一个单链表的模板程序:
```c++
#include <iostream>
using namespace std;
template <class T>
class Node {
public:
T data;
Node<T>* next;
Node(T val = 0, Node<T>* ptr = NULL)
{
data = val;
next = ptr;
}
};
template <class T>
class LinkedList {
private:
Node<T>* head;
Node<T>* tail;
int length;
public:
LinkedList()
{
head = tail = NULL;
length = 0;
}
~LinkedList()
{
Node<T>* p = head;
while (p != NULL) {
Node<T>* q = p;
p = p->next;
delete q;
}
length = 0;
}
void add(T val)
{
Node<T>* p = new Node<T>(val, NULL);
if (head == NULL) {
head = tail = p;
}
else {
tail->next = p;
tail = p;
}
length++;
}
void remove(T val)
{
while (head != NULL && head->data == val) {
Node<T>* p = head;
head = head->next;
delete p;
length--;
}
if (head == NULL) {
tail = NULL;
return;
}
Node<T>* p = head;
while (p->next != NULL) {
if (p->next->data == val) {
Node<T>* q = p->next;
p->next = q->next;
delete q;
length--;
}
else {
p = p->next;
}
}
tail = p;
}
void print()
{
Node<T>* p = head;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
};
int main()
{
LinkedList<int> list;
list.add(1);
list.add(2);
list.add(3);
list.add(2);
list.add(4);
list.print();
list.remove(2);
list.print();
return 0;
}
```
这个程序定义了一个 `Node` 类,用于表示链表的每个节点,以及一个 `LinkedList` 类,用于表示单链表。`add` 方法用于向链表中添加一个元素,`remove` 方法用于删除链表中所有值为指定值的元素,`print` 方法用于打印链表的所有元素。在 `main` 函数中,我们创建了一个 `LinkedList` 对象,并向其中添加了一些元素,然后删除了其中值为 2 的元素,并打印了链表中剩余的元素。