在学习C++数据结构的过程中,C++双向链表是一个非常重要的基础内容。与单向链表不同,双向链表的每个节点不仅包含指向下一个节点的指针,还包含指向前一个节点的指针。这使得我们可以在两个方向上遍历链表,提高了某些操作的效率。

双向链表(Doubly Linked List)是一种链式存储结构,其每个节点由三部分组成:
这种结构允许我们在 O(1) 时间内删除或插入节点(前提是已知节点位置),并且可以从前往后或从后往前遍历整个链表。
首先,我们需要定义一个节点类(Node)和一个双向链表类(DoublyLinkedList)。
// 定义节点结构class Node {public: 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 append(int value) { Node* newNode = new Node(value); if (!head) { head = tail = newNode; } else { tail->next = newNode; newNode->prev = tail; tail = newNode; } } // 从头部开始正向打印链表 void printForward() { Node* current = head; while (current) { std::cout << current->data << " "; current = current->next; } std::cout << std::endl; } // 从尾部开始反向打印链表 void printBackward() { Node* current = tail; while (current) { std::cout << current->data << " "; current = current->prev; } std::cout << std::endl; } // 删除指定值的节点 void deleteNode(int value) { if (!head) return; Node* current = head; while (current && current->data != value) { current = current->next; } if (!current) return; // 未找到 // 如果是头节点 if (current == head) { head = current->next; } // 如果是尾节点 if (current == tail) { tail = current->prev; } // 调整前后指针 if (current->prev) { current->prev->next = current->next; } if (current->next) { current->next->prev = current->prev; } delete current; } // 析构函数:释放所有节点内存 ~DoublyLinkedList() { while (head) { Node* temp = head; head = head->next; delete temp; } tail = nullptr; }};下面是一个完整的使用示例,展示如何创建双向链表并进行基本操作:
#include <iostream>int main() { DoublyLinkedList list; list.append(10); list.append(20); list.append(30); std::cout << "正向遍历: "; list.printForward(); // 输出: 10 20 30 std::cout << "反向遍历: "; list.printBackward(); // 输出: 30 20 10 list.deleteNode(20); std::cout << "删除20后正向遍历: "; list.printForward(); // 输出: 10 30 return 0;}掌握C++双向链表不仅能帮助你深入理解指针和内存管理,还能为学习更复杂的数据结构(如树、图、LRU缓存等)打下坚实基础。在实际开发中,双向链表常用于实现浏览器历史记录、撤销/重做功能、以及需要频繁在两端操作的数据结构。
通过本篇链表操作教程,你应该已经能够独立实现一个功能完整的双向链表了。记得多加练习,尝试添加更多功能,比如按位置插入、查找节点、反转链表等!
本文详细讲解了C++双向链表的原理与实现方法,包括节点定义、插入、删除、正反向遍历等核心操作。希望这篇面向初学者的C++数据结构教程能帮助你轻松入门双向链表。
本文由主机测评网于2025-12-06发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123906.html