📜  门| GATE CS Mock 2018 |第 54 题(1)

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

题目描述

这是 GATE CS Mock 2018 的第 54 题。题目要求实现一个双向链表中某个元素的删除操作。

题目分析

双向链表中,每个节点都有指向前驱和后继节点的指针。删除节点时,需要将前驱节点的指针指向当前节点的后继节点,后继节点的指针指向当前节点的前驱节点。对于头节点和尾节点的删除需要特殊处理。

代码实现

假设双向链表节点的定义如下:

struct ListNode {
    int val;
    ListNode* prev;
    ListNode* next;
    ListNode(int x) : val(x), prev(nullptr), next(nullptr) {}
};

下面是 C++ 语言实现的删除操作函数:

void deleteNode(ListNode* node)
{
    if (!node) {
        return;
    }

    ListNode* prev = node->prev;
    ListNode* next = node->next;

    if (prev) {
        prev->next = next;
    }

    if (next) {
        next->prev = prev;
    }

    delete node;
}

总结

双向链表可以实现快速的插入和删除操作,但是空间复杂度略高。在实际应用中,需要根据具体情况权衡选择。