删除最后一个节点的逻辑如下:
转到节点的指针,它的下一个是 NULL
然后释放它,对吧?我试图在一个函数中实现这个逻辑:
node* Delete_Last(node*head){
node* i=head;
while (i->next!=NULL){
i=i->next;
}
free(i);
i=NULL;
return head;
}
当我尝试打印列表时,我不能 - 这是一个无限循环 . 你能告诉我逻辑中的缺陷是什么以及如何纠正它吗?
1 回答
不,不对 . 您还必须更新上一个节点的下一个节点,如果head是最后一个节点,则前进 . 所以首先你应该把指针指向头部指针,你需要这个以防万一你需要更新头部 . 其次,因为它是单链表,你应该保留上一个节点:
我不知道你想要什么返回,所以我假设你的代码是新的结束,再回头也没有意义 . 现在你可以用以下方法调用: