我写了一个递归来删除具有特定数据值的节点,但是它不能正常工作。
Node * removeAll(Node *top, char c){
if(top == NULL)
return NULL;
Node *newTop;
if(top->data == c){
newTop = top->next;
delete top;
}else{
newTop = top;
}
newTop->next = removeAll(newTop->next,c);
return newTop;
}
提供给函数的链表包含值
h e l l o
我希望输出的列表包含值h e o
,但它具有值h e l o
最佳答案
更改此:
if(top->data == c){
newTop = top->next;
delete top;
}else{
newTop = top;
}
对此:
while(top && top->data == c){
newTop = top->next;
delete top;
top = newTop;
}
newTop = top;
这样,包含目标值的连续元素将全部删除,然后再移至下一个元素。
顺便说一句,如果该函数是迭代而不是递归地编写的,则它可能会使用更少的内存并更快。