用c++ 1、定义一个单向链表的模板类,分别实现增加、删除、 查找和打印操作。要求在main函数中由链表模板类创建整型类模板并测试各个成员函数。
时间: 2024-10-20 09:14:01 浏览: 37
在C++中,我们可以创建一个模板类来表示单向链表,包含增删查遍历等基本操作。首先,我们定义一个节点模板类`ListNode`,然后定义链表模板类`LinkedList<T>`,其中T是一个类型参数,代表存储的数据类型。以下是代码示例:
```cpp
template <typename T>
class ListNode {
public:
T data;
ListNode* next;
ListNode(T value) : data(value), next(nullptr) {}
};
template <typename T>
class LinkedList {
private:
ListNode<T>* head;
public:
LinkedList() : head(nullptr) {}
// 添加元素到链表尾部
void addNode(T value) {
ListNode<T>* newNode = new ListNode<T>(value);
if (head == nullptr) {
head = newNode;
} else {
ListNode<T>* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
}
// 删除指定值的节点
void removeNode(T value) {
if (head == nullptr) return;
if (head->data == value) {
ListNode<T>* temp = head;
head = head->next;
delete temp;
return;
}
ListNode<T>* current = head;
while (current->next != nullptr && current->next->data != value) {
current = current->next;
}
if (current->next != nullptr) {
ListNode<T>* toDelete = current->next;
current->next = current->next->next;
delete toDelete;
}
}
// 查找是否存在特定值
bool searchNode(T value) const {
ListNode<T>* current = head;
while (current != nullptr) {
if (current->data == value) {
return true;
}
current = current->next;
}
return false;
}
// 打印链表
void printList() const {
ListNode<T>* current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}
// 主函数测试
friend int main() {
LinkedList<int> list;
list.addNode(5); // 添加整数
list.addNode(10);
list.addNode(15);
list.printList(); // 打印初始链表
if (list.searchNode(10)) { // 检查是否找到10
std::cout << "Found 10\n";
} else {
std::cout << "Not found 10\n";
}
list.removeNode(10); // 删除10
list.printList();
return 0;
}
};
```
在这个例子中,我们在`main`函数中创建了一个整型链表,并通过调用上述方法进行了添加、查找和删除操作,以及打印链表的内容。
阅读全文