试图从链接列表中删除节点后的分割故障



我正在尝试通过链接列表,然后删除不是数字的节点。我一直在收回细分故障,我不确定我要在哪里寻求不存在的指针。

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;
    }
}

相关内容

  • 没有找到相关文章