双向链表的创建插入删除等操作,cpp代码
时间: 2024-10-15 15:24:01 浏览: 23
双向链表插入删除基本应用介绍
5星 · 资源好评率100%
双向链表是一种数据结构,其中每个节点包含两个指针,一个指向下一个节点,另一个指向前一个节点。以下是基本的双向链表操作的C++代码示例:
首先,我们需要定义一个Node节点类:
```cpp
class Node {
public:
int data;
Node* prev;
Node* next;
// 构造函数
Node(int value) : data(value), prev(nullptr), next(nullptr) {}
};
```
接下来,我们定义双向链表的基本操作:
1. 创建链表(如果为空)
```cpp
Node* createList() {
return new Node(0); // 初始化头节点
}
```
2. 插入节点到链表头部
```cpp
void insertAtBeginning(Node** head, int value) {
Node* newNode = new Node(value);
if (*head != nullptr) {
newNode->next = *head;
(*head)->prev = newNode;
}
*head = newNode;
}
```
3. 插入节点到链表中部
```cpp
void insertAfter(Node** current, Node* newNode, int value) {
newNode->data = value;
newNode->prev = current->prev;
newNode->next = current;
if (current->prev != nullptr)
current->prev->next = newNode;
else
*head = newNode; // 如果插入的是头节点
current->prev = newNode;
}
```
4. 删除节点
```cpp
void deleteNode(Node** head, int value) {
Node* temp = *head;
while (temp != nullptr && temp->data != value) {
temp = temp->next;
}
if (temp == nullptr) return; // 节点未找到
// 分情况处理删除节点
if (temp == *head) {
*head = temp->next;
if (*head != nullptr) *head->prev = nullptr;
} else {
temp->prev->next = temp->next;
if (temp->next != nullptr) temp->next->prev = temp->prev;
}
delete temp;
}
```
阅读全文