繁体   English   中英

冒泡排序双链表Java

[英]Bubble Sort Doubly Linked List Java

我正在尝试在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();

          }
      }



  }

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

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

你可以这样做:

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,但它会将对象的数据设置为它作为参数获取的值,而不是返回该对象中数据的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM