我正在尝试在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();
}
}
}
答案 0 :(得分: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,但它会将对象的数据设置为它作为参数获取的值,而不是返回该对象中数据的值。