Java 链表-在方法导致链表永久继续之前插入

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

当我调用这个insert before方法时,它会执行一开始应该执行的操作,但随后它会导致链表一直运行,直到我单击“停止”(系统输出时)。我找不出这种方法哪里出错了

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()
方法