用DeleteData(DLinkList &L,int data) 函数来实现双链表的删除操作
时间: 2024-09-24 09:17:44 浏览: 38
在双链表中,删除一个节点通常涉及到修改前后节点的指针链接。假设你有一个名为`DLinkList`的双向链表类,`data`是要删除的数据,`&L`是指向链表的引用,`DeleteData`函数可以按照以下步骤实现:
```cpp
// 假设DLinkList中已经定义了头结点prev和当前结点current指针
void DeleteData(DLinkList& L, int data) {
// 检查链表是否为空
if (L.head == nullptr) {
return;
}
// 首先让当前节点指向头节点
DLinkList::Node* current = L.head;
// 当前节点不是头节点时,遍历链表
while (current != nullptr && current->data != data) {
prev = current;
current = current->next;
}
// 如果找到了要删除的节点
if (current != nullptr) {
// 如果删除的是头节点
if (current == L.head) {
L.head = current->next;
if (L.head) {
L.head->prev = nullptr;
} else {
L.tail = nullptr;
}
// 如果删除的不是头节点
else {
if (prev) {
prev->next = current->next;
} else { // 如果是尾节点,更新尾部指针
L.tail = current->next;
if (L.tail) {
L.tail->prev = nullptr;
}
}
current->next->prev = prev;
}
// 释放已删除节点的内存
delete current;
}
}
```
这个函数会在链表中找到指定`data`的第一个匹配项,然后调整前后节点的连接,确保链表的连续性。如果没有找到要删除的节点,函数不做任何动作。
阅读全文