0

この質問が以前に数回尋ねられたことは知っていますが、他のトピックのどれも、私がやろうとしていることを正確に議論していないようです.

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

  }
4

1 に答える 1

2

次の行に問題があります。

first = new DListNode(Value, first, null);

previous.setNext(new DListNode(Value, current, previous));

近くのノードの参照を更新せずに、ノードを追加しているだけです。

最初の行は次のようになります。

first = new DListNode(Value, first, null);
first.getNext().setPrevious(first)

2 行目は次のようになります。

previous.setNext(new DListNode(Value, current, previous));
current.setPrevious(previous.getNext())

そんな感じ。

于 2013-01-14T06:59:13.350 に答える