0

私はバブルソートを機能させるのに苦労してきましたが、今では無限ループに陥っているようです。

私はそれを処理するためにポインタを適切にインクリメントしていると思いましたが、そうではないようです。誰かが私のインクリメントを適切に終了させるためにどこに行くべきかを見つけることができれば、それは素晴らしいことです!

バブルソート方式:

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;
          Node sentinelNode = currentNode;


          for(i=1; i<list.getSize(); i++)
          {

              while(sentinelNode.getNext() != null)
              {
                  if(currentNode.getData() > currentNode.getNext().getData())
                  {
                      if(currentNode == list.head)
                      {
                          Node tempNode = currentNode.getNext();

                          list.head = tempNode;
                          tempNext = tempNode.getNext();

                          tempNode.setNext(currentNode);
                          currentNode.setNext(tempNext);
                          currentNode.setPrevious(tempNode);

                          tempNext.setPrevious(currentNode);
                      }
                      else if(currentNode.getNext() == list.last)
                      {
                          Node tempNode = currentNode.getNext();
                          list.last = currentNode;
                          tempPrevious = currentNode.getPrevious();

                          tempNode.setNext(currentNode);
                          tempNode.setPrevious(tempPrevious);

                          currentNode.setPrevious(tempNode);
                      }
                      else
                      {
                          Node tempNode = currentNode.getNext();
                          tempPrevious = currentNode.getPrevious();
                          tempNext = currentNode.getNext();

                          tempPrevious.setNext(tempNode);
                          tempNext.setPrevious(currentNode);

                          currentNode.setNext(tempNext);
                          tempNode.setPrevious(tempPrevious);
                      }

                  }

                  sentinelNode = sentinelNode.getNext();

              }
          }


      }
4

1 に答える 1

0

あなたの問題はあなたのelse節にあります。あなたが設定しているものをよく見てください。まず最初に、

tempNode = currentNode.getNext();
tempNext = currentNode.getNext();

それらは同じオブジェクトを指しています。あなたがするときも

currentNode.setNext(tempNode);

tempNodeはすでにcurrent.getNext()であるため、何も変更していません。

このため、sentinelNodeでDoubleLinkedListの反復処理に問題が発生しています。

于 2012-09-26T04:23:03.367 に答える