📌  相关文章
📜  数据结构示例-双向链表的末尾删除节点(1)

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

双向链表

双向链表是一种链式存储结构,每个节点包含两个指针,分别指向前一个节点和后一个节点,因此可以通过正向遍历和反向遍历来访问每一个节点。

末尾删除节点

删除双向链表的末尾节点,需要找到链表中最后一个节点,然后将倒数第二个节点的后继指针指向空即可。

下面是一个C++示例代码片段:

struct Node {
    int data;
    Node* prev;
    Node* next;

    Node(int data) {
        this->data = data;
        this->prev = nullptr;
        this->next = nullptr;
    }
};

void deleteLastNode(Node* head) {
    if (!head) {
        return;
    }
    Node* curr = head;
    while (curr->next) {
        curr = curr->next;
    }
    Node* prev = curr->prev;
    if (prev) {
        prev->next = nullptr;
        delete curr;
    } else {
        delete curr;
        head = nullptr;
    }
}

以上代码的时间复杂度为$O(n)$,其中$n$为链表的长度。

总结

双向链表具有正向遍历和反向遍历的优势,但是需要额外的空间来存储前驱指针。删除操作需要找到要删除的节点,因此时间复杂度较高。在实际应用中,需要根据具体的场景选择恰当的数据结构。