0

我正在尝试在 Java 中的双向链表上创建冒泡排序,但出现 Null Pointer Exception 错误。我相信当我在头部调用 getPrevious 方法时会出现问题,该方法的值当然为 null。但是,如果不访问其他节点的 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

所以你有一个双链表。我假设每个元素都包含一些信息……比如说一个整数。它还必须包含两个指针:一个指向前一个元素,一个指向下一个元素。

假设这是真的,请注意您不必修改指针,因为它们已经从一个元素指向另一个元素。您所要做的就是对列表元素的值进行排序,以便列表中的第一项具有最低值,第二项具有第二低值,依此类推。

你可以这样做:

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 回答