我的pop_back()函数应该删除双向链表中的最后一个元素。但是,我当前的代码删除了最后的两个元素而不是一个。我已经设置了类似于这个的pop_front()函数,它的工作正常。我无法弄清楚我做错了什么。
以下是带有struct Node的链接列表标题的一部分:
class linkedlist
{
private:
struct Node{
Node* next;
Node* prev;
element_type data;
};
Node* head;
Node* tail;
unsigned int numElements;
我的pop_back()函数来自linkedlist的公共部分:
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--;
}
}
如果问题不是很明显,那么错误可能会隐藏在代码中的其他地方。还在寻找。
答案 0 :(得分:0)
虽然该功能不会同时删除两个节点,但功能错误。它不会检查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--;
}
}