从单链表中删除最后一个节点

时间:2015-10-21 01:07:30

标签: c++

我必须编写一个方法来删除List中的最后一个节点。你们有什么想法我应该如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

如果你有一个单链表,你别无选择,只能遍历整个列表到最后一个节点,保持指向前一个节点的指针,这样你就可以在释放最后一个节点时重置它的next字段。节点:

if (head)
{
    node *curNode = head;
    node *prevNode = NULL;

    while (curNode->next)
    {
        prevNode = curNode;
        curNode = curNode->next;
    }

    if (prevNode) prevNode->next = NULL;
    delete curNode;
}

如果您使用的是双链表,这会更容易,因为您可以保留指向列表中最后一个节点的指针,并直接对其进行操作:

if (head == tail)
{
    delete head;
    head = tail = NULL;
}
else if (tail)
{
    node *curNode = tail;
    tail = curNode->previous; 
    tail->next = NULL;
    delete curNode;
}

当然,如果你真的在使用C ++,那么你应该使用STL的std::list(双链接)或std::forward_list(单链接)容器来处理这些容器详细信息。

答案 1 :(得分:0)

要删除列表中的最后一个元素,您需要做的就是维护两个单独的节点。最初应该指向列表的头部,而另一个应该指向列表中的第二个元素。您应该执行以下操作:

if(head == NULL)
     return 0;
else if(head->next == NULL){
     Node *temp = head;
     delete temp;
     head = NULL;
}
else{
    Node *one = head;
    Node *two = head->next;
    while(two->next != NULL){
         two = two->next;
         one = one->next;
    }
    one->next = NULL;
    delete two;
}