请告诉我这个函数如何删除单个链表中的最后一个节点
void deleend()
{
Node *q;
Node *p;
for (q = head; q != NULL; q = q->next)
{
p=q;
p->next=NULL;
}
delete q;
}
答案 0 :(得分:0)
删除列表的最后一项是一个非常简单的算法。
您需要遍历整个列表,直到到达next
指针等于NULL
的节点。这是您的最后一个元素,即您要删除的元素。
因此,您需要释放此对象分配的内存,并将前一项的next
指针设置为NULL
。这是最重要的事情,因为它避免了段错误。
现在,关于您发布的代码,我发现您正在做一些非常糟糕的事情......您正在声明*q
和*p
,然后循环遍历您的列表(由全局{{1指向我想,我想。)
问题在于,使用循环中的代码,您将第一项与链接列表取消链接,然后循环结束,因为您正在Node* head
中复制指针q
然后设置它是p
指针tu next
,导致将Null
设置为NULL。第一次迭代“”fine“”导致您将q->next
的第一个元素设置为next
,第二次迭代发现Null
设置为{{ 1}}因此它会停止。
注意:在发布代码解决方案之前,我想知道你是否已经非常清楚算法的目的是什么,尝试尝试修复你的代码,如果你不能再做,我会发布正确的算法:)