c++头插法建立循环双链表
时间: 2024-09-28 11:09:36 浏览: 33
计算机科学:C++中链表数据结构详解及其基本操作实现
在 C++ 中,头插法(push_front)用于在链表头部添加元素,创建循环双链表(circular doubly linked list)通常涉及到以下几个步骤:
1. 定义节点结构:首先,需要定义一个包含数据域和指针域的节点结构,包括一个指向当前节点的指针、前驱节点的指针和后继节点的指针。
```cpp
struct Node {
int data;
Node* prev;
Node* next;
};
```
2. 创建头结点:创建一个特殊的头结点,它的 `prev` 和 `next` 都指向它自身,表示循环链表的开始和结束。
```cpp
Node* head = new Node();
head->data = 0; // 或者设置初始值
head->prev = head;
head->next = head;
```
3. 插入新节点:每次想在链表头部插入新的节点,你可以创建一个新的节点,然后将其 `prev` 指向当前头结点,`next` 指向前一个节点,并更新头结点的 `next` 指针。
```cpp
void pushFront(int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->prev = head;
newNode->next = head->prev;
head->prev->next = newNode;
head->prev = newNode;
}
```
4. 示例完整代码:
```cpp
#include <iostream>
// 定义节点
struct Node {
int data;
Node* prev;
Node* next;
};
// 插入节点到头部
void pushFront(Node*& head, int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->prev = head;
newNode->next = head->prev;
head->prev->next = newNode;
head->prev = newNode;
}
// 打印循环链表
void printCircularList(Node* node) {
while (node != nullptr) {
std::cout << node->data << " ";
node = node->next;
}
std::cout << std::endl;
}
int main() {
Node* head = new Node();
head->data = 0; // 初始化头结点
pushFront(head, 5);
pushFront(head, 4);
pushFront(head, 3);
std::cout << "循环链表内容: ";
printCircularList(head);
return 0;
}
```
阅读全文