[英]C++ Doubly linked list - deleting element from the tail using pop_back()
我的pop_back()函數應該刪除雙向鏈表中的最后一個元素。 但是,我當前的代碼刪除了最后兩個元素,而不僅僅是一個。 我已經設置了類似於此函數的pop_front()函數,效果很好。 我無法弄清楚自己做錯了什么。
這是我的帶有結構節點的鏈表頭的一部分:
class linkedlist
{
private:
struct Node{
Node* next;
Node* prev;
element_type data;
};
Node* head;
Node* tail;
unsigned int numElements;
我來自鏈表的公共部分的pop_back()函數:
void linkedlist::pop_back()
{
if (empty())
return;
else {
Node *delBack = tail;
Node *nodeToDelete = delBack;
delBack = delBack->prev;
delBack->next = NULL;
delete nodeToDelete;
tail = delBack;
numElements--;
}
}
如果問題不是立即顯而易見的,則可能是該錯誤掩埋在代碼的其他位置。 仍在搜索中。
盡管該功能不能同時刪除兩個節點,但是該功能是錯誤的。 它不會檢查tail->prev
是否等於nullptr
並且在列表為空時也不會將head
設置為nullptr
。 該函數可以如下所示。
void linkedlist::pop_back()
{
if ( tail )
{
Node *nodeToDelete = tail;
tail = tail->prev;
if ( tail )
{
tail->next = nullptr;
}
else
{
head = nullptr;
}
delete nodeToDelete;
numElements--;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.