0

Javaで二重にリンクされたリンクリストにバブルソートを作成しようとしていますが、NullPointerExceptionエラーが発生します。もちろん値がnullであるヘッドでgetPreviousメソッドを呼び出すと、問題が発生すると思います。ただし、他のノードのgetPreviousメソッドにアクセスせずに、バブルソートを実行する方法を考えることはできません。

ifステートメントを実装して、リストの先頭か末尾かを最初に確認できますが、これを行うにはもっと賢い方法があると思います。

また、これを正常にビルドすることができなかったため、コードが機能するかどうかさえわかりません。これを実装する方法について別のアイデアがある場合は、私に知らせてください。

どんな提案でも大歓迎です!

 public static void bubbleSort(DoubleLinkedList list) //static method used to sort the linked list using bubble sort
  {
      int i = 0;
      int j = 0;
      Node currentNode = list.head;
      Node previousNode = currentNode;
      Node tempNext =  currentNode;
      Node tempPrevious = currentNode;


      for(i=0; i<list.getSize(); i++)
      {
          for(j=0; j<list.getSize()-1; i++)
          {
              if(currentNode.getData() > currentNode.getNext().getData())
              {
                  tempNext = currentNode.getNext().getNext();
                  tempPrevious = currentNode.getPrevious();
                  currentNode.getPrevious().setNext(currentNode.getNext());
                  currentNode.getNext().setNext(currentNode);
                  currentNode.setPrevious(currentNode.getNext());
                  currentNode.setNext(tempNext);

              }

              currentNode = currentNode.getNext();

          }
      }



  }
4

1 に答える 1

2

したがって、二重リンクリストがあります。各要素にはいくつかの情報が含まれていると思います...たとえば整数です。また、前の要素へのポインタと次の要素へのポインタの2つのポインタが含まれている必要があります。

これが真実であると仮定すると、ポインタはすでに1つの要素から別の要素を指しているため、ポインタを変更する必要がないことに注意してください。リストの最初の項目の値が最も低く、2番目の項目の値が2番目に低くなるように、リスト要素の値を並べ替えるだけです。

あなたはこのようにそれを行うことができます:

public static void bubbleSort(DoubleLinkedList list) //static method used to sort the linked list using bubble sort {
      int i = 0;
      Node currentNode = list.head;
      Node auxNode;
      int foundChange = 1;
      while(foundChange) {
        foundChange = 0;
        for(i=0; i<list.getSize()-1; i++) {
          if (currentNode.getData() > currentNode.getNext().getData()) {
            auxNode.setData(currentNode.getData());
            currentNode.setData(currentNode.getNext.getData());
            currentNode.getNext.setData(auxNode.getData());
            foundChange = 1;
          }
          currentNode = currentNode.getNext();
        }

}

setDataメソッドをまだ定義していない場合は、定義してください。getDataに似ている必要がありますが、オブジェクトのデータの値を返すのではなく、オブジェクトのデータをパラメーターとして取得した値に設定します。

于 2012-09-26T02:35:24.627 に答える