gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:05:53 25 4
gpt4 key购买 nike

我试过了,但我无法让它工作。我需要从链表中删除一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com