我正在尝试通过链接列表,然后删除不是数字的节点。我一直在收回细分故障,我不确定我要在哪里寻求不存在的指针。
void clean(node*& start)
while(start)
if(*is a number*){
node* tail = start;
while (tail->next){
node* temp = tail->next;
tail->data = temp->data;
tail = tail->next;
}
if (!tail->next)
delete tail;
}
start= start->next;
}
}
->接下来是将节点链接到其余节点的原因。
此代码各种错误。内部循环是完全不必要的,并且在外部循环的每一个迭代中更新start
指针从根本上是错误的(呼叫者每次称为clean()
时都会丢失其列表的head
指针)。
代码应该看起来更像这样:
void clean(node* &start)
{
node *n = start, *prev = NULL, *next;
while (n)
{
next = n->next;
if (n->data is not a number)
{
if (prev) prev->next = next;
if (start == n) start = next;
delete n;
}
else
prev = n;
n = next;
}
}