在C++中实现双向链表可以通过定义一个ListNode结构体来实现,该结构体包含三个成员变量:值val、指向下一个节点的指针next和指向前一个节点的指针prev。
以下是一个简单的双向链表的实现示例:
#include <iostream>
struct ListNode {
int val;
ListNode* next;
ListNode* prev;
ListNode(int x) : val(x), next(nullptr), prev(nullptr) {}
};
class DoubleLinkedList {
private:
ListNode* head;
ListNode* tail;
public:
DoubleLinkedList() : head(nullptr), tail(nullptr) {}
void insertAtHead(int val) {
ListNode* newNode = new ListNode(val);
if (head == nullptr) {
head = newNode;
tail = newNode;
} else {
newNode->next = head;
head->prev = newNode;
head = newNode;
}
}
void insertAtTail(int val) {
ListNode* newNode = new ListNode(val);
if (tail == nullptr) {
head = newNode;
tail = newNode;
} else {
newNode->prev = tail;
tail->next = newNode;
tail = newNode;
}
}
void printList() {
ListNode* current = head;
while (current != nullptr) {
std::cout << current->val << " ";
current = current->next;
}
std::cout << std::endl;
}
};
int main() {
DoubleLinkedList dl;
dl.insertAtHead(1);
dl.insertAtTail(2);
dl.insertAtTail(3);
dl.printList();
return 0;
}
在上面的示例中,定义了一个DoubleLinkedList类来实现双向链表的基本操作,包括在链表头部插入节点和在链表尾部插入节点。通过调用insertAtHead和insertAtTail方法可以向双向链表中插入节点,然后通过printList方法打印出整个链表的值。