我知道这个问题已经被问过几次了,但是其他任何话题似乎都没有讨论我要做什么。
public void add(int Value) {
DListNode previous = null;
DListNode current = first;
while ((Integer)current.getValue() < Value) {
previous = current; //move previous up to current
current = current.getNext(); //advance current one node ahead
if (current == null) { //if current is the very last node in the list
break;
}
}
if (previous == null) { //if the previous object is null, the value should be inserted at the front
first = new DListNode(Value, first, null);
}
else { //if not, the value should be inserted between current and previous
previous.setNext(new DListNode(Value, current, previous));
}
getLast(); //updates the last field (Not important)
}
DListNode是一个类,其中包含整数变量,Next DListNode和上一个DListNode(以及标准的getter和setter方法)。它使用参数DListNode(值,下一个节点,上一个节点)初始化。存储的值是对象类型。
我想做的是在当前节点和先前节点之间插入一个新节点。应将新节点设置为上一个的下一个节点,将当前设置为新节点的下一个节点,同时将上一个设置为新节点的前一个节点,并将新节点设置为当前节点的前一个节点。仅当该值大于第一个节点中包含的值时,才会发生这种情况。但是,这些节点仅成为链接的转发节点,我不知道为什么。
如果需要,我可以发布整个课程,对您的帮助或想法将不胜感激。
编辑:我在Archer的帮助下弄清楚了。万一有人想知道,这是我的最终方法(我必须添加另一个if / else语句来处理nullPointerErrors)。
public void add(int Value) {
DListNode previous = null;
DListNode current = first;
while ((Integer)current.getValue() < Value) {
previous = current; //move previous up to current
current = current.getNext(); //advance current one node ahead
if (current == null) { //if current is the very last node in the list
break;
}
}
if (previous == null) { //if the previous object is null, the value should be inserted at the front
DListNode insert = new DListNode(Value, current, previous);
current.setPrevious(insert);
first = insert;
}
else { //if not, the value should be inserted between current and previous
if (current == null) {
DListNode insert = new DListNode(Value, current, previous);
previous.setNext(insert);
}
else {
DListNode insert = new DListNode(Value, current, previous);
current.setPrevious(insert);
previous.setNext(insert);
}
}
getLast(); //updates the last field
}
最佳答案
这些行中有一个问题:
first = new DListNode(Value, first, null);
和
previous.setNext(new DListNode(Value, current, previous));
您只是添加节点而没有更新附近节点的参照。
第一行应如下所示:
first = new DListNode(Value, first, null);
first.getNext().setPrevious(first)
第二行应如下所示:
previous.setNext(new DListNode(Value, current, previous));
current.setPrevious(previous.getNext())
这样的东西。