📜  用于删除双向链表中节点的 C++ 程序(1)

📅  最后修改于: 2023-12-03 14:56:19.639000             🧑  作者: Mango

删除双向链表节点的 C++ 程序

本文介绍了一个用于删除双向链表中节点的 C++ 程序。双向链表是一种常见的数据结构,每个节点包含一个指向前一个节点和后一个节点的指针。

数据结构定义

首先,我们需要定义一个双向链表的节点结构。每个节点都包含一个数据项和指向前一个节点和后一个节点的指针。

struct Node {
    int data;
    Node* prev;
    Node* next;
};
删除节点的函数

接下来,我们将实现一个函数来删除双向链表中的节点。该函数将接受一个指向链表头节点和要删除的节点的指针。

void deleteNode(Node* head, Node* toDelete) {
    // 如果要删除的节点是链表的头节点
    if (head == toDelete) {
        head = toDelete->next;
    }

    // 如果要删除的节点不是链表的最后一个节点
    if (toDelete->next != nullptr) {
        toDelete->next->prev = toDelete->prev;
    }

    // 如果要删除的节点不是链表的第一个节点
    if (toDelete->prev != nullptr) {
        toDelete->prev->next = toDelete->next;
    }

    // 释放要删除的节点的内存
    delete toDelete;
}
使用示例

现在,我们将演示如何使用这个删除节点的函数来删除双向链表中的节点。

int main() {
    // 创建一个双向链表
    Node* head = new Node;
    head->data = 1;
    head->prev = nullptr;
    head->next = nullptr;

    Node* node2 = new Node;
    node2->data = 2;
    node2->prev = head;
    node2->next = nullptr;
    head->next = node2;

    Node* node3 = new Node;
    node3->data = 3;
    node3->prev = node2;
    node3->next = nullptr;
    node2->next = node3;

    // 删除节点 2
    deleteNode(head, node2);

    // 输出剩余节点的数据
    Node* current = head;
    while (current != nullptr) {
        cout << current->data << " ";
        current = current->next;
    }

    return 0;
}

上述示例代码将删除双向链表中的节点 2,并输出剩余节点的数据。

结论

本文介绍了一个用于删除双向链表中节点的 C++ 程序。提供了一个删除节点的函数和一个使用示例。你可以根据自己的需求和数据结构进行修改和扩展。