首页 > 解决方案 > 删除最后一个节点,并将尾部更新到最后一个节点

问题描述

我想删除链接列表中的最后一个节点,但似乎我做错了什么,因为没有元素被删除。

void deleteTail(){
    node *temp = head;
    int iterator = 1;
    if (head == NULL)
    {
        cout<<"Nothing to be deleted."<<endl;
    }
    else if (head == tail)
    {
        temp = head;
        delete(temp);
        head = NULL;
        tail = NULL;
    }
    else
    {
        while(temp->next != NULL){
            temp = temp -> next;
        }
        tail = temp;
        temp = temp->next;
        delete(temp);
    }
}

如果链表是 1->2->3->4->5->NULL,我希望它变成 1->2->3->4->NULL。我在我的代码中做错了什么?提前致谢!

标签: c++

解决方案


这应该可以完成这项工作。

while (temp->next != NULL && temp->next->next != NULL) {
    temp = temp->next;
}

tail = temp;
delete temp->next;
temp->next = NULL;

问题出在循环的末尾,temp指向最后一个元素。之后,您将设置temptemp->next,或者换句话说,设置为NULL。之后你打电话delete过来NULL,什么都不做。

编辑:当然,这进入了最后一个else块。


推荐阅读