C++ 动态分配列表-创建一个函数,删除包含偶数值的所有元素

C++ 动态分配列表-创建一个函数,删除包含偶数值的所有元素,c++,C++,作为家庭作业,我必须创建一个程序,删除所有包含偶数值的节点 我是这样做的: #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->nex

作为家庭作业,我必须创建一个程序,删除所有包含偶数值的节点

我是这样做的:

#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;
}
#包括
使用名称空间std;
结构节点{
国际信息;
节点*下一步;
};
void sterge(节点*&p)
{
节点*t;
t=新节点;
如果(p->info%2==0)
{
p=p->next;
}
t=p;
while(t!=NULL)
{
如果(t->next!=NULL)
{
如果(t->next->info%2==0)
{
节点*aux;
aux=t->next;
t->next=t->next->next;
删除aux;
}
}
t=t->next;
}
}
int main()
{
节点*头=新节点;
头部->信息=5;
node*p=新节点;
node*t=新节点;
t->info=2;
head->next=t;
p=水头;
node*x=新节点;
x->info=4;
node*w=新节点;
w->info=6;
t->next=x;
x->next=w;
w->next=nullptr;
斯特奇(头部);
//循环浏览列表并打印每个值
while(p!=NULL){
下一步;
}
返回0;
}
但是在main中创建的节点的输出是5和4。 我知道原因,但我不知道如何修复它

基本上,我验证下一个节点是否具有偶数值,然后转到下一个节点。所以看起来是这样的:

5->下一步是偶数,因此2被删除 ->转到下一个节点,即4

^现在的问题是没有检查这个节点,因为我总是检查下一个节点。因此,该方案被认为是有效的


那么,我如何修复我的程序呢?

在您的
删除后放置一个
继续


这样,下一次迭代将立即开始,而不执行当前迭代的其余部分,因此将跳过不需要的
t=t->next

可能。我没试过。我还没有测试过。老实说,我甚至没有认真考虑过它。实际上它是有效的,但我不知道怎么做。我从来没有使用过continue-tbh,only-break-lol。可以解释一下它在这种情况下的作用吗?我会尽快接受正确的答案。@JohnSmith你的书没有解释
continue
在循环中的作用吗?现在是一个很好的机会来回顾它关于循环的章节。我不能公正地发表评论,我会剥夺你获得一些有价值的研究实践的好机会@约翰斯密斯虽然我已经对措辞做了一些调整,如果我可以在线查看的话,但我认为它可能会因为指针的作用而有所不同。我去看看。非常感谢。那里有内存泄漏,为什么要分配
t=新节点在开始时?只是抛出随机代码看看它是否解决了你的问题?因为我认为我必须初始化它?我可以直接使用t=p吗?不用客气。我的错误。我不必使用t=新节点。谢谢。是的,你们可以,实际上你们应该在声明变量时初始化它,你们应该在你们需要它的地方首先声明它。所以更干净的方法是
node*t=p并将其放在适当的位置。