我做了这个删除最后一个函数,看起来它应该可以工作,但是当我调用它时,它实际上并没有删除任何东西,所有节点仍然存在。

有什么问题吗?

  public Object removeLast()
    {
        Node currentNode;
        currentNode = this.getHead();
        while(currentNode != null)
        {

            if(currentNode.getNext()==null)
            {
               currentNode = null;
               return null;
            }
            currentNode = currentNode.getNext();
        }
        return null;
    }

最佳答案

您有一个包含节点的列表。每个节点都包含一个指向下一个节点的指针。

要从列表中删除节点,必须将上一个节点的下一个指针设置为null

如果您还具有指向上一个元素的指针,那么这很简单。就像是:

public Object removeLast()
{
    Node currentNode;
    currentNode = this.getHead();
    while(currentNode != null)
    {

        if(currentNode.getNext()==null)
        {
           // The line below is changed!!!
           currentNode.getPrevious().setNext(null);
           return null;
        }
        currentNode = currentNode.getNext();
    }
    return null;
}


如果您在每个节点中都有指向下一个节点和上一个节点的指针,那么我们将此称为双向链接列表。



同样,不需要将返回类型设置为Object,您可以将方法签名更改为:

public void removeLast()


然后将每个return null;更改为return;

10-07 18:20