C++构造一个链表 包括 头插入 尾插入 删除 搜索 遍历 并封装函数
时间: 2024-09-29 10:08:31 浏览: 36
用C++实现的循环链表
在C++中,我们可以创建一个简单的双向链表结构来支持头插入、尾插入、删除、搜索和遍历操作。首先,我们需要定义一个节点类`Node`,包含数据和指向前后节点的指针。然后定义一个双向链表类` DoublyLinkedList`,并实现相应的成员函数。
```cpp
// 定义节点类 Node
class Node {
public:
int data;
Node* prev;
Node* next;
// 构造函数
Node(int value) : data(value), prev(nullptr), next(nullptr) {}
};
// 双向链表类 DoublyLinkedList
class DoublyLinkedList {
private:
Node* head;
Node* tail;
public:
// 构造函数
DoublyLinkedList() : head(nullptr), tail(nullptr) {}
// 头部插入
void insertAtHead(int value) {
Node* newNode = new Node(value);
if (head == nullptr) {
head = tail = newNode;
} else {
newNode->next = head;
head->prev = newNode;
head = newNode;
}
}
// 尾部插入
void insertAtTail(int value) {
Node* newNode = new Node(value);
if (tail == nullptr) {
head = tail = newNode;
} else {
newNode->prev = tail;
tail->next = newNode;
tail = newNode;
}
}
// 删除节点
bool deleteNode(int value) {
Node* current = head;
while (current != nullptr) {
if (current->data == value) {
if (current == head) {
head = head->next;
if (head) head->prev = nullptr;
} else if (current == tail) {
tail = tail->prev;
tail->next = nullptr;
} else {
current->prev->next = current->next;
current->next->prev = current->prev;
}
delete current;
return true; // 成功删除
}
current = current->next;
}
return false; // 未找到要删除的节点
}
// 搜索节点
Node* search(int value) const {
Node* current = head;
while (current != nullptr) {
if (current->data == value)
return current;
current = current->next;
}
return nullptr; // 未找到该值
}
// 遍历链表
void traverse() const {
Node* temp = head;
while (temp != nullptr) {
std::cout << temp->data << " ";
temp = temp->next;
}
std::cout << "\n";
}
};
```
阅读全文