链接列表removeLast()函数实际上并没有删除任何东西

时间:2013-11-18 23:15:06

标签: java linked-list

无法弄清楚为什么它没有删除最后一个节点.....我正常的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;
    }

这是我的删除功能,我认为它不适用于最后一个节点

   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;
        }

    }

1 个答案:

答案 0 :(得分:0)

看起来您正在实施双向链表?你的删除函数实际上是指remove函数中给定节点的前一个节点。

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

要删除列表中的最后一个节点,需要将上一个节点上的Next引用设置为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;
    }

}

请注意,由于您似乎在此处有一个双向链表,为什么不使用最后一个元素的前一个节点来找出要删除哪一个,而不是从头部迭代?