如何删除链表中所有出现的值

C++: How to remove all occurrences of a value in a linked list

本文关键字:链表 何删除 删除      更新时间:2023-10-16

我目前正在尝试研究链表在c++中的工作方式,并且我遇到了在链表中删除某个值的主题。我知道如何删除一个特定值的第一个实例,这没有问题。然而,我不知道如何删除链表中某个值的所有实例。我可以看到如何删除列表开头和中间值的任何实例,但是一旦l->next是一个nullptr,我就会陷入困境。如果l->next是一个nullptr,那么我如何将指针从值之前重定向到要删除的值之后的东西?

如果这是一个重复的问题,我很抱歉;如果是这种情况,我将删除它

为了删除一个节点,你确实使它的指针无效,所以为了能够继续迭代列表,你在删除之前保存下一个指针:

while(node->next != node_I_want_to_remove){
    node = node->next;
}
Node* tmp = node->next->next; // save the next
remove(node->next);  
node->next = tmp;             // attach the two ends of the list and keep iterating