【发布时间】:2019-10-22 02:34:44
【问题描述】:
我在使用 delete tail 功能时遇到了一些问题,当我释放当前节点时它不起作用,但是当我使用下一个节点时一切正常。有人可以向我解释发生了什么以及为什么它不起作用吗?
这是列表
typedef struct node {
int codice;
struct node *next;
} nodo;
typedef nodo * lista;
不工作的删除尾部功能是
lista rimuovi_in_coda(lista l){
if(l == NULL) return NULL;
lista l_scorri = l;
while(l_scorri->next != NULL)
l_scorri = l_scorri->next;
free(l_scorri);
l_scorri = NULL;
return l;
}
在这个列表中 l 没有被修改:
input: 0, 4
output: 0, 4
有效的是:
lista rimuovi_in_coda(lista l){
if(l == NULL || l->next == NULL) {
free(l);
return NULL;
}
lista l_scorri = l;
while(l_scorri->next->next != NULL)
l_scorri = l_scorri->next;
free(l_scorri->next);
l_scorri->next = NULL;
return l;
}
在这个列表中,返回的列表是预期的
input: 0, 4
output: 0
【问题讨论】:
标签: c list pointers singly-linked-list