删除链表中的最后一个节点

时间:2016-03-29 07:42:11

标签: c++ linked-list nodes

请告诉我这个函数如何删除单个链表中的最后一个节点

void deleend()
{

    Node *q;
    Node *p;

    for (q = head; q != NULL; q = q->next) 
    {
        p=q;
        p->next=NULL;
    }
    delete q;
}

1 个答案:

答案 0 :(得分:0)

删除列表的最后一项是一个非常简单的算法。

您需要遍历整个列表,直到到达next指针等于NULL的节点。这是您的最后一个元素,即您要删除的元素。

因此,您需要释放此对象分配的内存,并将前一项的next指针设置为NULL。这是最重要的事情,因为它避免了段错误。

现在,关于您发布的代码,我发现您正在做一些非常糟糕的事情......您正在声明*q*p,然后循环遍历您的列表(由全局{{1指向我想,我想。)

问题在于,使用循环中的代码,您将第一项与链接列表取消链接,然后循环结束,因为您正在Node* head中复制指针q然后设置它是p指针tu next,导致将Null设置为NULL。第一次迭代“”fine“”导致您将q->next的第一个元素设置为next,第二次迭代发现Null设置为{{ 1}}因此它会停止。

注意:在发布代码解决方案之前,我想知道你是否已经非常清楚算法的目的是什么,尝试尝试修复你的代码,如果你不能再做,我会发布正确的算法:)