この質問が以前に数回尋ねられたことは知っていますが、他のトピックのどれも、私がやろうとしていることを正確に議論していないようです.
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 は、整数変数、次の DListNode、および前の DListNode (標準の getter および setter メソッドと共に) を含むクラスです。これは、引数 DListNode(値、次のノード、前のノード) で初期化されます。格納される値は Object 型です。
私がやろうとしているのは、現在と以前の間に新しいノードを挿入することです。新しいノードは前のノードの次のノードとして設定し、現在のノードは新しいノードの次のノードとして設定し、前のノードは新しいノードの前のノードとして設定し、新しいノードは現在のノードの前のノードとして設定する必要があります。これは、値が最初のノードに含まれる値より大きい場合にのみ発生します。ただし、ノードは前方にリンクされるだけで、その理由はわかりません。
必要に応じてクラス全体を投稿できます。助けやアイデアがあれば大歓迎です。
編集:アーチャーの助けを借りてそれを理解しました. 誰かが疑問に思っている場合に備えて、これが私の最後の方法です (nullPointerErrors を処理するために別の if/else ステートメントを追加する必要がありました)。
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
}