1C++定义一个单向链表的模板类,分别实现增加、删除、查找和打印操作。要求在main函数中由链表模板类创建整型类模板并测试各个成员函数。
时间: 2024-10-20 21:11:41 浏览: 35
单向链表的类模板实现增加、删除、查找和打印
3星 · 编辑精心推荐
在C++中,我们可以定义一个模板类来表示单向链表,其中包含节点的结构体、链表的操作方法如添加、删除、查找以及打印等。这里是一个简单的例子:
```cpp
#include <iostream>
// 定义链表节点模板
template <typename T>
struct ListNode {
T data;
ListNode<T>* next;
};
// 链表模板类
template <typename T>
class LinkedList {
public:
// 构造函数,初始化头节点为nullptr
LinkedList() : head(nullptr) {}
// 添加新元素到链表尾部
void addNode(T value) {
ListNode<T>* newNode = new ListNode<T>{value, nullptr};
if (!head) {
head = newNode;
} else {
ListNode<T>* current = head;
while (current->next) {
current = current->next;
}
current->next = newNode;
}
}
// 删除指定值的节点
void deleteNode(T value) {
if (!head) return;
if (head->data == value) {
ListNode<T>* temp = head;
head = head->next;
delete temp;
return;
}
ListNode<T>* current = head;
while (current->next && current->next->data != value) {
current = current->next;
}
if (current->next) {
ListNode<T>* temp = current->next;
current->next = current->next->next;
delete temp;
}
}
// 查找特定值的节点
ListNode<T>* searchNode(T value) const {
ListNode<T>* current = head;
while (current) {
if (current->data == value) {
return current;
}
current = current->next;
}
return nullptr; // 如果未找到则返回nullptr
}
// 打印链表
void printList() const {
ListNode<T>* current = head;
while (current) {
std::cout << current->data << " -> ";
current = current->next;
}
std::cout << "NULL" << std::endl;
}
private:
ListNode<T>* head;
};
int main() {
// 创建整数链表实例
LinkedList<int> intList;
// 测试成员函数
intList.addNode(1);
intList.addNode(2);
intList.addNode(3);
std::cout << "Initial list: ";
intList.printList();
intList.deleteNode(2);
std::cout << "After deleting 2: ";
intList.printList();
if (intList.searchNode(3)) {
std::cout << "Found 3 at position: ";
auto node = intList.searchNode(3);
std::cout << node->data << std::endl;
} else {
std::cout << "3 not found." << std::endl;
}
return 0;
}
```
在这个示例中,我们首先定义了一个模板`ListNode`用于存储不同类型的数据,并在`LinkedList`模板类中实现了增加、删除、查找和打印功能。在`main`函数中,我们创建了一个整型链表实例,并进行了相应的操作测试。
阅读全文