我在完成家庭作业时遇到了麻烦,使用迭代器移动了双向链表。以下是似乎是问题的方法,但对我来说似乎在逻辑上是正确的。我有一个我用来传递列表的跑步者文件,跑步者文件打印出前后两个以查看我的链接是否正常工作。如果我使用add(T元素)方法添加项目,它向前和向后都可以正常工作。但是,如果我使用add(T element,int index)方法添加项目,则列表将正确地向前输出,但在向后迭代器上,新添加的项目不在输出中。
让我怀疑current.getNextNode().setPriorNode(newNode);
是问题,但似乎对我来说是对的,或者我错了?
谢谢!
更新:我使用修复程序编辑了代码,以防其他人在将来遇到同样的问题。
public void add(T element) {
Node<T> node = new Node(element);
if (itsFirstNode == null) {
itsFirstNode = node;
itsLastNode = node;
}
else {
itsLastNode.setNextNode(node);
node.setPriorNode(itsLastNode);
itsLastNode = node;
}
size++;
} // end of add() method
public void add(T element, int index) {
int counter = 0;
Node<T> newNode = new Node(element);
Node<T> current = itsFirstNode;
while (current.getNextNode() != null ) {
if (counter == index - 1 )
break;
current = current.getNextNode();
counter++;
}
newNode.setNextNode(current.getNextNode());
current.getNextNode().setPriorNode(newNode);
newNode.setPriorNode(current);
current.setNextNode(newNode);
size++;
} // end of Overloaded add() method
答案 0 :(得分:3)
newNode.setNextNode(current.getNextNode());
current.setNextNode(newNode);
newNode正确设置下一个,当前下一个设置为newNode
newNode.setPriorNode(current);
newNode先前已正确设置
current.getNextNode().setPriorNode(newNode);
current.getNextNode()是newNode,因此您将newNode设置为newNode的优先级。如果你将这行提前两行移动
,它应该可以工作答案 1 :(得分:0)
而不是
current.getNextNode().setPriorNode(newNode);
尝试
newNode.getNextNode().setPriorNode(newNode);
答案 2 :(得分:0)
您可以在最后5行使用以下代码
newNode.setNextNode(current.getNextNode());
current.getNextNode().setPriorNode(newNode);
current.setNextNode(newNode);
newNode.setPriorNode(current);
size++;