所以我的目标是删除一个链表头节点。但是,当我有一个空列表时,我遇到了麻烦,这是我到目前为止所拥有的
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;
}
答案 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,第五个弹出窗口将进一步正常返回。