Java 函数的作用不是实际删除任何内容

Java 函数的作用不是实际删除任何内容,java,linked-list,Java,Linked List,我不明白为什么它不删除最后一个节点……而且我有正常的remove()函数工作正常,这不是问题所在 有什么问题吗 public T removeLast() { Node<T> currentNode, prevNode; currentNode = this.getHead(); while(currentNode != null) { if(currentNode.getNext()

我不明白为什么它不删除最后一个节点……而且我有正常的remove()函数工作正常,这不是问题所在

有什么问题吗

 public T removeLast()
    {
        Node<T> currentNode, prevNode;
        currentNode = this.getHead();
        while(currentNode != null)
        {

            if(currentNode.getNext()==null)
            {
//               prevNode = this.getPrevious(currentNode);
//               prevNode.setNext(null);
                this.remove(currentNode);
               return null;
            }
            currentNode = currentNode.getNext();
        }
        return null;
    }
public T removeLast()
{
节点currentNode,prevNode;
currentNode=this.getHead();
while(currentNode!=null)
{
if(currentNode.getNext()==null)
{
//prevNode=this.getPrevious(currentNode);
//prevNode.setNext(空);
删除(currentNode);
返回null;
}
currentNode=currentNode.getNext();
}
返回null;
}
这是我的删除函数,我认为它不适用于最后一个节点

   private boolean remove(Node<T> aNode)
    {
        if(aNode==null)
        {
            return true;
        }
        else
        {
            Node<T> prevNode, nextNode;
            prevNode = this.getPrevious(aNode);
            if(aNode.getNext()==null){
                return true;
            }
            else{
                nextNode = aNode.getNext();
                prevNode.setNext(nextNode);
            }

            return true;
        }

    }
私有布尔删除(节点阳极)
{
如果(阳极==null)
{
返回true;
}
其他的
{
节点prevNode,nextNode;
prevNode=this.getPrevious(阳极);
if(阳极.getNext()==null){
返回true;
}
否则{
nextNode=阳极。getNext();
prevNode.setNext(nextNode);
}
返回true;
}
}

看起来您正在实现一个双链接列表?remove函数实际上是指remove函数中给定节点的前一个节点

问题似乎是当它是最后一个节点时,您实际上没有做任何事情,您只是返回true

要删除列表中的最后一个节点,需要将上一个节点上的下一个引用设置为null,然后返回

private boolean remove(Node<T> aNode)
{
    if(aNode==null)
    {
        return true;   // not sure why this returns true... false perhaps?
    }
    else
    {
        Node<T> prevNode, nextNode;
        prevNode = this.getPrevious(aNode);
        // you will also need to check prevNode for null, in the case of the first node.
        if(prevNode == null) {
            this.setNext(aNode.getNext());
            return true;
        }
        else if(aNode.getNext()==null){
            prevNode.setNext(null);  // set the previous node's next (aNode) to null.
            return true;
        }
        else{
            nextNode = aNode.getNext();
            prevNode.setNext(nextNode);
        }

        return true;
    }

}
私有布尔删除(节点阳极)
{
如果(阳极==null)
{
return true;//不确定为什么返回true…可能是false?
}
其他的
{
节点prevNode,nextNode;
prevNode=this.getPrevious(阳极);
//对于第一个节点,还需要检查prevNode是否为null。
if(prevNode==null){
this.setNext(阳极.getNext());
返回true;
}
else if(阳极.getNext()==null){
prevNode.setNext(null);//将上一个节点的next(阳极)设置为null。
返回true;
}
否则{
nextNode=阳极。getNext();
prevNode.setNext(nextNode);
}
返回true;
}
}

请注意,既然这里似乎有一个双链接列表,为什么不使用最后一个元素的前一个节点来确定要删除哪一个,而不是从头开始迭代?

为什么要将问题标记为
c
?无论发生什么情况,为什么都要返回“null”@NeilLocketz它必须返回一些东西。我不认为这是问题所在……是吗?我会a)调试并b)检查
remove
是否与最后一个节点有任何问题。@SJuan76我认为你是对的……remove与最后一个节点不起作用。我已将该函数添加到Post中。您是否也需要第一个节点的特殊情况?是的,您需要在将prevNode指定给参数节点的引用之前进行检查。如果这样做,那么逻辑将变得相同,只需将“this”上的节点引用设置为null。