📅  最后修改于: 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;
}
双向链表可以实现快速的插入和删除操作,但是空间复杂度略高。在实际应用中,需要根据具体情况权衡选择。