这是一些代码:
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/