6. 双向链表的相关操作及函数描述代码
时间: 2024-11-20 16:33:30 浏览: 20
双向链表是一种数据结构,其中每个节点包含两个指针,分别指向前一个节点和后一个节点。它允许更灵活地遍历和插入删除元素。以下是常见的双向链表操作和函数的一些描述以及伪代码:
1. **初始化链表**:
- 创建一个新的头节点(通常为NULL),表示链表为空。
```cpp
void createDoublyLinkedList(Node** head) {
*head = nullptr;
}
```
2. **添加元素到链表头部**:
- 创建新节点,并将其`prev`指向前一个节点,`next`指向当前头节点。
- 更新头节点为新节点。
```cpp
void insertAtStart(Node** head, int data) {
Node* newNode = new Node(data);
newNode->prev = nullptr;
newNode->next = *head;
if (*head != nullptr)
*head->prev = newNode;
*head = newNode;
}
```
3. **添加元素到链表尾部**:
- 新节点的`prev`指向前一个节点,`next`设置为NULL。
- 如果链表为空,直接设置头节点;否则找到最后一个节点并更新其`next`。
```cpp
void insertAtEnd(Node** head, int data) {
Node* newNode = new Node(data);
if (*head == nullptr) {
*head = newNode;
newNode->prev = nullptr;
} else {
Node* lastNode = *head;
while (lastNode->next != nullptr)
lastNode = lastNode->next;
lastNode->next = newNode;
newNode->prev = lastNode;
}
}
```
4. **删除指定节点**:
- 需要同时保存前一个节点和下一个节点的信息,然后更新它们的指针。
```cpp
void deleteNode(Node** head, Node* node) {
if (*head == node) {
*head = node->next;
} else {
Node* prev = *head;
while (prev->next != node)
prev = prev->next;
prev->next = node->next;
if (node->next != nullptr)
node->next->prev = prev;
}
delete node;
}
```
阅读全文