尝试从链表中删除节点后出现分段错误

时间:2017-09-28 23:42:19

标签: c++ linked-list segmentation-fault doubly-linked-list

我尝试传入链接列表,然后删除不是数字的节点。我一直在接受分段错误,而且我不知道我在哪里找到一个不存在的指针。

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

- >接下来是将节点链接到其余节点的内容。

1 个答案:

答案 0 :(得分:0)

这段代码是各种错误的。内部循环是完全没有必要的,并且在外部循环的每次迭代中更新start指针是根本错误的(每次调用head时调用者都会丢失其列表的clean()指针)。

代码应该看起来更像这样:

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