Java 链表-在方法导致链表永久继续之前插入
当我调用这个insert before方法时,它会执行一开始应该执行的操作,但随后它会导致链表一直运行,直到我单击“停止”(系统输出时)。我找不出这种方法哪里出错了Java 链表-在方法导致链表永久继续之前插入,java,eclipse,function,methods,linked-list,Java,Eclipse,Function,Methods,Linked List,当我调用这个insert before方法时,它会执行一开始应该执行的操作,但随后它会导致链表一直运行,直到我单击“停止”(系统输出时)。我找不出这种方法哪里出错了 private boolean insertBefore(Node aNode, Node beforeNode) { Node currentNode; Node prevNode; //aNode= new Node(); currentNode = th
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
节点。这个问题与这个问题有何不同:?我最初将错误的方法粘贴到了那个方法中,每个发表评论的人都在一起评论另一个方法,这仍然让它继续下去forever@user2997963“永远继续”链表节点必须包含循环引用。上面的代码应该可以防止这种情况发生。刚刚看到新的,没有“setPrevious”方法unfortunately@user2997963如果您同时具有下一个和上一个节点(即,它是一个双链接列表)的概念,则必须支持setPrevious()
。否则,您需要使用循环(如原始问题中的循环),并且应该删除getPrevious()
方法