在C中弹出一个空的链表

时间:2015-04-01 03:32:04

标签: c linked-list

所以我的目标是删除一个链表头节点。但是,当我有一个空列表时,我遇到了麻烦,这是我到目前为止所拥有的

conscell *ll_pop(conscell *list)
{
    if ( list == NULL) {            // do nothing
        return list;
    }
    if ( list != NULL) {
        conscell *p = list->next;
        free(list);
        list = p;
        return list;
    }

这是实施。我们做了一系列流行音乐。首先我们弹出两个节点然后我们弹出3个节点

 conscell *ll_push(conscell *list, void *data)
{
    conscell *new = xmalloc(sizeof *new);   // allocate associate memory
    new->data = data;           // assign data
    new->next = list;           // attach the new node to the old list
    return new;
}

2 个答案:

答案 0 :(得分:2)

您如何定义空列表?在调用函数之前将列表设置为main中的NULL,它应该可以正常工作。

答案 1 :(得分:0)

您需要做的是使用pop的返回值来修改列表指针。

你的主要应该是这样的。

int main(void)
{
    conscell *list= NULL;

    ....

    list = ll_push(list,data1);
    list = ll_push(list,data2);
    list = ll_push(list,data3);
    list = ll_push(list,data4);

    list = ll_pop(list);
    list = ll_pop(list);        
    list = ll_pop(list);
    list = ll_pop(list);
    list = ll_pop(list);

}

第4个弹出窗口将列表指针返回NULL,第五个弹出窗口将进一步正常返回。