用C+1实现实现双向链表,至少包括插入、删除等功能模块
时间: 2024-10-20 08:09:01 浏览: 31
list_hj.rar_链表 模块
在C++中,双向链表是一种数据结构,其中每个节点包含指向其前驱和后继节点的指针。以下是使用C++实现一个基本的双向链表,包含插入和删除功能的基本步骤:
```cpp
#include <iostream>
// 定义链表节点
struct Node {
int data; // 节点数据
Node* prev; // 指向前一个节点
Node* next; // 指向下一个节点
// 构造函数
Node(int value) : data(value), prev(nullptr), next(nullptr) {}
};
// 双向链表类
class DoublyLinkedList {
private:
Node* head; // 链表头节点
Node* tail; // 链表尾节点
public:
// 初始化空链表
DoublyLinkedList() : head(nullptr), tail(nullptr) {}
// 插入节点到链表头部
void insertAtFront(int value) {
Node* newNode = new Node(value);
if (head == nullptr) {
head = tail = newNode;
} else {
newNode->next = head;
head->prev = newNode;
head = newNode;
}
}
// 插入节点到链表尾部
void insertAtEnd(int value) {
Node* newNode = new Node(value);
if (tail == nullptr) {
head = tail = newNode;
} else {
newNode->prev = tail;
tail->next = newNode;
tail = newNode;
}
}
// 删除指定值的节点(从链表中找到并移除)
void removeNode(int value) {
Node* current = head;
while (current != nullptr) {
if (current->data == value) {
if (current->prev != nullptr) {
current->prev->next = current->next;
} else { // 如果当前节点是头节点
head = current->next;
}
if (current->next != nullptr) {
current->next->prev = current->prev;
} else { // 如果当前节点是尾节点
tail = current->prev;
}
delete current;
return;
}
current = current->next;
}
std::cout << "Value not found." << std::endl;
}
// 打印链表
void printList() {
Node* temp = head;
while (temp != nullptr) {
std::cout << temp->data << " ";
temp = temp->next;
}
std::cout << std::endl;
}
};
int main() {
DoublyLinkedList list;
list.insertAtFront(5);
list.insertAtEnd(10);
list.printList(); // 输出: 5 10
list.removeNode(5);
list.printList(); // 输出: 10
return 0;
}
```
阅读全文