数据结构编写程序实现双向链表的建立、插入、删除的基本操作;
时间: 2024-09-29 18:05:53 浏览: 33
双向链表结点p前的插如数据x的操作-Java版数据结构(程序员必须看)
数据结构中,双向链表是一种特殊的数据结构,每个节点包含两个指针,分别指向前一个节点和后一个节点。以下是基本操作的实现:
1. **建立双向链表**:
- 创建一个Node类,包含数据域(data)、指向前一个节点(prev)和指向后一个节点(next)的引用。
```cpp
struct Node {
int data;
Node* prev;
Node* next;
// 构造函数初始化
Node(int value) : data(value), prev(nullptr), next(nullptr) {}
};
```
- 双向链表类(DoublyLinkedList)需要一个头节点(head)。
```cpp
class DoublyLinkedList {
Node* head;
// 其他辅助方法...
};
```
2. **插入操作**:
- 插入在头部: 将新节点设置为头节点,旧头节点的prev设为新节点,并更新头节点。
```cpp
void insertAtBeginning(Node* newNode) {
newNode->next = head;
newNode->prev = nullptr;
if (head != nullptr) {
head->prev = newNode;
}
head = newNode;
}
```
- 插入在指定位置: 需找到目标位置前一个节点并调整链接。
```cpp
void insertAfter(Node* prevNode, int value) {
Node* newNode = new Node(value);
newNode->prev = prevNode;
newNode->next = prevNode->next;
if (prevNode->next != nullptr) {
prevNode->next->prev = newNode;
}
prevNode->next = newNode;
}
```
3. **删除操作**:
- 删除头节点: 简单地将头节点指向下一个节点。
```cpp
void deleteHead() {
if (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
}
}
```
- 删除指定节点: 找到该节点的前一个节点,然后更改链接。
```cpp
void deleteNode(Node* target) {
if (target == nullptr || target == head) return; // 检查节点是否有效
Node* prev = target->prev;
if (prev != nullptr) {
prev->next = target->next;
} else { // 如果是头节点
head = target->next;
}
delete target;
}
```
阅读全文