我有一个链表方法,用于在前面插入,所以它取一个节点并将其放在beforeNode之前。目前它是这样做的,但后来它会永远存在,并使链表变得无限大,而它本应只有四个长。有人明白为什么它一直在继续吗?
private void insertBefore(Node aNode, Node beforeNode)
{
if(this.getPrevious(beforeNode) != null) {
this.getPrevious(beforeNode).setNext(aNode);
// aNode.setPrevious(beforeNode);
//this.getPrevious(this.getPrevious(beforeNode)).setNext(aNode);
} else {
head = aNode;
}
aNode.setNext(beforeNode);
// beforeNode.setPrevious(aNode);
}
这是打印列表方法,可能与此有关,但我不这么认为
public void printList()
{
Node currentNode;
currentNode = this.getHead();
System.out.print("head ->");
while(currentNode!=null)
{
System.out.print(currentNode.getData().toString()+ " -> ");
currentNode = currentNode.getNext();
}
System.out.println("|||");
}
我认为您是如何为aNode和beforeNode传递相同节点的。在java中,每个对象都是一个引用。你有没有尝试创建一个节点beforeNode的副本?它可能使两者相同,并导致链表具有自循环。使用复制构造函数或类似clone的东西来获得一个重复的节点。