动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
Dynamic allocated lists - create a function that deletes all the elements which contain an even value
正如我的作业,我必须创建一个程序来删除所有包含偶数值的节点。
以下是我的做法:
#include <iostream>
using namespace std;
struct node {
int info;
node* next;
};
void sterge(node*& p)
{
node* t;
t = new node;
if (p->info % 2 == 0)
{
p = p->next;
}
t = p;
while (t != NULL)
{
if (t->next != NULL)
{
if (t->next->info % 2 == 0)
{
node* aux;
aux = t->next;
t->next = t->next->next;
delete aux;
}
}
t = t->next;
}
}
int main()
{
node* head = new node;
head->info = 5;
node* p = new node;
node* t = new node;
t->info = 2;
head->next = t;
p = head;
node* x = new node;
x->info = 4;
node* w = new node;
w->info = 6;
t->next = x;
x->next = w;
w->next = nullptr;
sterge(head);
//Loop through the list and print each value
while (p != NULL) {
cout << p->info << endl;
p = p->next;
}
return 0;
}
但是在 main 中创建的节点的输出是 5 和 4。 我知道原因,但我不知道如何解决。
基本上,我验证下一个节点是否具有偶数值,然后转到下一个节点。所以它看起来像这样:
5 -> 下一个是偶数,所以 2 被删除 ->转到下一个节点,即 4
^现在的问题是这个节点没有被检查,因为我总是检查下一个节点。因此,程序认为它是有效的。
那么如何修复我的程序呢?
在delete
后加上一个continue
。
这样,下一次迭代将立即开始,而不执行当前迭代的其余部分,因此将跳过不需要的t = t->next
。
相关文章:
- 删除功能不适用于串行通信后多个循环中的多个实例
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- 用于删除句点和空格的函数
- 阵列的临时存储如何用于C++中的删除恢复?
- 用于删除符号并生成排列的算法
- 适用于 std::unique_ptr 的内存高效自定义删除器?
- 用于unique_ptr的有状态自定义删除程序
- 为什么使用自定义删除器unique_ptr不适用于 nullptr,而shared_ptr则适用于 nullptr?
- 为什么擦除-删除成语不适用于反向迭代器
- 自定义删除器,用于shared_ptr<>给出"无上下文错误"
- 用于删除复制/移动分配运算符的有效签名
- 用于删除一系列值的 STL 容器
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- 如何在用于删除节点的函数中检查我的链表是否C++为空
- 删除如何适用于QTimer
- 动态分配数组中的运行时错误,用于删除 C++ 中的元素
- 堆用于快速插入和删除O(日志n)
- 不会用于删除对象的基类的析构函数应该是虚拟的吗?
- 如何删除用于动态分配对象的智能指针