当我在方法之前调用此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节点。

10-06 14:53