我似乎不明白我错过了什么,我已经花了几个小时,几个小时看着这个,我尝试的一切都不起作用。
我的思维过程是检查列表的第二个节点是否是偶数,如果是,则链接第一个和第三个节点,并删除第二个节点,但它不起作用...我已经在这一周卡住了。
void delete_even()
{
nod *aux;
if (head == NULL)
{
cout << "List doesn't exist!";
}
else
{
nod *curent;
current = head;
while (curent)
{
if (curent->next->info % 2 == 0)
{
curent = curent->next->next;
curent->next = aux;
delete aux;
break;
}
else
{
curent = curent->next;
}
}
}
}
我不知道还能做什么。
1条答案
按热度按时间nhjlsmyf1#
这段代码有几处错误。
当
curent
指向列表中的最后一个节点时,使用curent->next
会调用 undefined behavior,因为next
在这种情况下将是NULL
。这会导致您跳过列表中的第一个节点。您从未将
aux
赋值为指向任何对象,因此在aux
上调用delete
也是 undefined behavior。即使
aux
指向有效节点,您也会在删除aux
指向的节点之前将aux
分配给curent->next
,从而使curent->next
指向无效内存,这也是 * 未定义的行为 *。如果您确实设法从列表中删除了一个节点,那么您将立即中断循环,因此您将只从列表中删除一个偶数,而不是像标题所暗示的那样删除所有偶数。
请尝试以下内容:
或者: