您的位置:首页 >C++双向链表实现方法详解
发布于2025-10-25 阅读(0)
扫一扫,手机访问
答案:C++实现双向链表需定义含data、next、prev的节点结构,并用类封装head和tail指针及操作方法,支持push_back、push_front、remove、正反向遍历等操作,通过维护前后指针实现高效插入删除,示例代码展示了基本操作与使用场景。

在C++中实现双向链表,核心是定义一个节点结构体(或类),其中包含数据域和两个指针:一个指向下一个节点(next),另一个指向前一个节点(prev)。然后通过类封装链表的操作,如插入、删除、查找和遍历等。
每个节点保存数据,并有两个指针分别连接前后节点。使用类来管理整个链表的头尾指针和操作方法。
示例代码:
#include <iostream> using namespace std;// 定义节点结构 struct ListNode { int data; ListNode next; ListNode prev;
ListNode(int val) : data(val), next(nullptr), prev(nullptr) {}};
// 双向链表类 class DoublyLinkedList { private: ListNode head; ListNode tail;
public: DoublyLinkedList() : head(nullptr), tail(nullptr) {}
// 在链表末尾插入节点 void push_back(int val) { ListNode* newNode = new ListNode(val); if (!head) { head = tail = newNode; } else { tail->next = newNode; newNode->prev = tail; tail = newNode; } } // 在链表头部插入节点 void push_front(int val) { ListNode* newNode = new ListNode(val); if (!head) { head = tail = newNode; } else { newNode->next = head; head->prev = newNode; head = newNode; } } // 删除指定值的节点 bool remove(int val) { ListNode* curr = head; while (curr) { if (curr->data == val) { if (curr->prev) { curr->prev->next = curr->next; } else { head = curr->next; // 当前是头节点 } if (curr->next) { curr->next->prev = curr->prev; } else { tail = curr->prev; // 当前是尾节点 } delete curr; return true; } curr = curr->next; } return false; // 未找到 } // 打印链表(正向) void print_forward() { ListNode* curr = head; while (curr) { cout << curr->data << " "; curr = curr->next; } cout << endl; } // 打印链表(反向) void print_backward() { ListNode* curr = tail; while (curr) { cout << curr->data << " "; curr = curr->prev; } cout << endl; } // 析构函数:释放所有节点内存 ~DoublyLinkedList() { ListNode* curr = head; while (curr) { ListNode* next = curr->next; delete curr; curr = next; } }};
上述实现包含了常用操作,理解其逻辑有助于掌握双向链表的本质。
删除操作:
遍历方向:
测试上面的双向链表实现:
int main() {
DoublyLinkedList dll;
dll.push_back(1);
dll.push_back(2);
dll.push_front(0);
dll.print_forward(); // 输出: 0 1 2
dll.print_backward(); // 输出: 2 1 0
dll.remove(1);
dll.print_forward(); // 输出: 0 2
return 0;
}
基本上就这些。双向链表比单向链表更灵活,支持前后双向遍历和高效地在任意位置插入删除,但每个节点多一个指针开销。实际开发中可根据需求选择是否需要维护 tail 指针,以及是否加入 size 计数器等优化。
上一篇:Win10系统备份失败怎么解决
下一篇:微博改名方法及步骤详解
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8