这个函数应该从链表中移除元素。然而,目前它完成了这项工作,通过进一步的测试,我发现在使用该功能约2-3次后出现分段错误。例如,可以说listA
包含1 2 3 4 4 5
,当我做remove listA 4
然后打印listA
的元素时,输出应该是1 2 3 5
,它是。但是,当我在列表中多次使用1-2次删除功能时,它会停止工作,并且不断收到分段错误。我不知道为什么..任何帮助将不胜感激!函数不能多次工作?
void mylist::remove(int z)
{
Node *currP, *prevP;
prevP = NULL;
for (currP = head;
currP != NULL;
prevP = currP, currP = currP->next) {
if (currP->key == z) {
if (prevP == NULL) {
head = currP->next;
} else{
prevP->next = currP->next;
}
delete currP;
currP=prevP;
numberofnodes--;
}
}
return;
}
你已经接近精确了,但是:*“当我在列表中多次使用1-2次删除功能时,它会停止工作”*放下了球。看看[“最小,完整,可验证示例”](http://stackoverflow.com/help/mcve)。显示您的确切输入,以及编译任何人都可以复制的程序 - 粘贴到编译器(“完成”)并且可以重复(“可验证地”)给出错误的输出。测试基本案例,例如从包含1的列表中删除“1”。您可能在过程中发现自己的问题... – HostileFork 2014-10-28 06:39:24
只需修改for循环中的update语句,仅当它不是NULL时才从currP访问下一个元素。 – 2014-10-28 07:20:41