📅  最后修改于: 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$为链表的长度。
双向链表具有正向遍历和反向遍历的优势,但是需要额外的空间来存储前驱指针。删除操作需要找到要删除的节点,因此时间复杂度较高。在实际应用中,需要根据具体的场景选择恰当的数据结构。