双向链表删除C++中的偶数
Doubly linked list delete even numbers in C++
我正在尝试从双向链表中删除所有偶数。
我考虑过这些情况:
- 空列表
- 开头为偶数,
- 末尾的偶数
- 列表中间的偶数
- 偶数不在列表中
我下面的代码无法正常工作:
void DoublyList::deleteEvens()
{
if (first == NULL) {
cerr << "Empty List" << endl;
}
else {
Node *current = first;
bool found = false;
while (current != NULL && (!found)) {
Node *tCurrent = current;
if (current->getNextLink() == NULL) {
if (current->getData() % 2 == 0) {
first = NULL;
last = NULL;
delete current;
current = NULL;
count = 0;
}
else {
cerr << "Not in the list" << endl;
found = true;
}
}
else if (current == first && current->getData() % 2 == 0) {
first = first -> getNextLink();
first->setPreviousLink(NULL);
current = current->getNextLink();
delete tCurrent;
tCurrent = NULL;
-- count;
}
else if (current == last && current->getData() % 2 == 0) {
last = last->getPreviousLink();
last->setNextLink(NULL);
delete current;
current = NULL;
-- count;
}
else if (current->getData() % 2 == 0) {
current->getPreviousLink()->setNextLink(current->getNextLink());
current->getNextLink()->setPreviousLink(current->getPreviousLink());
current = current->getNextLink();
delete tCurrent;
tCurrent = NULL;
}
else {
current = current->getNextLink();
}
}
}
}
问题似乎是您的第一种情况:对于列表中的最后一项,current->getNextLink() == NULL
评估为 true。因此,当您处理最后一项时,您有效地删除了整个列表。
我假设这是为了检测列表中的第一项,将其更改为:
if (current->getNextLink() == NULL && current->getPreviousLink() == NULL)
或者,将其移出循环并仅使用第一个变量。
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- C++中的线程安全删除
- 如何从存储在std::映射中的std::集中删除元素
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数