当我在方法之前调用此insert时,它首先会执行应做的事情,但随后会导致链表永远持续运行,直到我单击Stop(停止打印)为止。我找不到这种方法出了什么问题
private boolean insertBefore(Node aNode, Node beforeNode)
{
Node currentNode;
Node prevNode;
//aNode= new Node();
currentNode = this.getHead();
while(currentNode!=null && currentNode.getNext()!=aNode)
{
if(currentNode == beforeNode)
{
prevNode = this.getPrevious(beforeNode);
prevNode.setNext(aNode);
aNode.setNext(beforeNode);
//aNode.setNext(currentNode);
return true;
}
currentNode = currentNode.getNext();
}
currentNode.setNext(beforeNode);
return false;
}
最佳答案
这比上面指定的代码简单得多,如果您有一个双向链接列表,则无需遍历所有元素:
private boolean insertBefore(Node aNode, Node beforeNode) {
if(beforeNode.getPrevious() != null) {
beforeNode.getPrevious().setNext(aNode);
aNode.setPrevious(beforeNode);
} else {
head = aNode;
}
aNode.setNext(beforeNode);
beforeNode.setPrevious(aNode);
}
如果
beforeNode
在列表的开头,则新节点将成为标题。否则,您的
beforeNode
后面将有一个节点。现在,它必须指向您的新节点。无论哪种方式,新节点的下一个指针都指向
beforeNode
节点。