c++ - 从单链表中删除整个节点

标签 c++ linked-list

我试过了,但我无法让它工作。我需要从链表中删除一个 number 元素。这是我到目前为止所做的:

class MatrixLL
{
private:
    struct MatrixLLElem
    {
        Matrix elem;
        MatrixLLElem* next;
        MatrixLLElem(const Matrix& m1): elem(m1), next(NULL)
        { }
    };
    MatrixLLElem* start;
public:
    MatrixLL();
    Matrix& elem(const int index);
    int getlength();
    void append(const Matrix& m1);
    void deleteelem(const int index);
    ~MatrixLL();
};

我的其他代码无关紧要,因为它运行良好,所以这是 deleteelem() 的代码;功能:

void MatrixLL::deleteelem(const int index)
{
    if(index < 1)
        throw "Invalid index specified.";

    if(start == NULL)
        throw "No element at specified location.";

    MatrixLLElem* currP = start;
    MatrixLLElem** prevP = NULL;

    for(int i = 1; i < index; i++)
    {
        prevP = &currP;
        if((*currP).next != NULL)
            currP = (*currP).next;
        else
            throw "No element at specified location.";
    }
    if(prevP == NULL)
    {
        start = NULL;
    }
    else
    {
        (*prevP) = (*currP).next;
    }
    delete currP;
}

编辑:如果我检查,它会将长度从 2 减少到 0...如果我追加然后检查等,长度函数似乎工作正常。索引应该从 1 开始。

最佳答案

问题是当您要删除第一个元素(索引=1)时。

代替

start = NULL; // wrong

正确的是:

start = (*currP).next; // the second element now becomes the first element

关于c++ - 从单链表中删除整个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6161471/

相关文章:

c++ - 这会导致内存泄漏吗?在函数调用中分配新对象

C++如何使用链表添加多项式

c - 按插入降序插入链表的插入功能 - 只允许头节点

java - 遍历链表会引发空指针异常

c - 单链表简单数据库

c++ - 模板 SFINAE 在 conditional_t 内

c++ - 我们如何才能只初始化结构成员一次并确保它们不可变?

c++ - CSocket::OnReceive 同时调用

c++ - FizzBu​​zz.cpp 与 lambdas?

c++ - 双链表查找删除