c++ - 如何从列表中删除一个元素?

标签 c++ c list pointers delete-operator

这是一些代码:

typedef struct n
{
    int value;
    struct n *next;
}ELEMENT;

.

typedef struct
{
    ELEMENT *head;
    ELEMENT *tail;
}INFO;

这是一个不起作用的函数:

void LIST::remove(int x)
{
ELEMENT *q = inf.head;

    while(q!=NULL)
    {
        if((q->value)==x)
        {
            ELEMENT * temp = q;
            q = q->next;
            delete temp;
            break;

        }
        else
            q=q->next;
    }
}

我不明白为什么从列表中删除元素不起作用。任何帮助将不胜感激。

最佳答案

小提示:拿一些纸和铅笔画一些框和箭头并模拟您正在做的事情:当您找到应该删除的项目时,您只是删除该元素但既不修改next 前一项的指针,也不是头指针或尾指针。因此,在删除之后,有一个元素具有指向无效内存位置(所谓的悬挂指针)的 next 指针。你想要做的是有一个额外的指向前一个项目的指针来调整它的 next 指针。

关于c++ - 如何从列表中删除一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21799682/

相关文章:

c++ - 多线程编程如何保证执行顺序?

c - 在 C 中打印字符数组会导致段错误

c - 为什么我不能打印传递给我程序的第一个参数?

c++ - LibTIFF 在 C++ 中读写 RGBA 图像

c++ - 使用启用了 c++11 的 clang 进行编译失败

c++ - 将可修改的参数传递给 C++ 函数

c - 可能是指针问题,但不确定原因

parsing - F# 中针对列表开头进行模式匹配的更简单方法

list - 如何防止两个用户在 Sharepoint 中编辑同一列表

list - 如何检查以下所有项目是否都在列表中?