C 双重链接列表 - 使用pop_back()从尾部删除元素
C++ Doubly linked list - deleting element from the tail using pop_back()
我的pop_back()函数应该删除双链接列表中的最后一个元素。但是,我当前的代码删除了最后一个两个元素,而不仅仅是一个。我已经设置了与此功能相似的pop_front()函数,该功能正常。我很难弄清楚自己做错了什么。
这是我的linkedlist标题的一部分,带有struct节点:
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--;
}
}
如果问题不是立即明显的,则可能将错误埋在代码中的其他地方。仍在搜索。
尽管该函数并未同时删除两个节点,但是该函数是错误的。它不会检查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--;
}
}
相关文章:
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- basic_string的前导/尾部不区分空格的特征
- 推导 std::vector::back() 的返回类型
- 在带有尾部斜杠的路径上返回 std::filesystem::create_directories() 的值
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- 如何应用尾部调用优化
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- 使用递归从尾部开始反转链表
- vector.back()和vector.end()有什么区别
- 如何在列表的末尾添加尾部元素
- 如何在全局函数中访问链表的头部和尾部
- 融合有尾部功能吗?
- 尾部调用优化是否适用于此功能?
- 列表大小为 1,但 front() 和 back() 不相等
- 链表,在尾部后面插入节点
- 删除矢量的尾部(通过擦除)内存是否有效