无法弄清楚为什么它没有删除最后一个节点.....我正常的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;
}
}
答案 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;
}
}
请注意,由于您似乎在此处有一个双向链表,为什么不使用最后一个元素的前一个节点来找出要删除哪一个,而不是从头部迭代?