试图找出如何对我的双向链表进行排序。 我在这里得到一个空指针异常:
while (temp.getNext()!=null){
是否有更好的方法或建议让这种方式正确?
public void sort() {
//bubble sort!
boolean swapped = (head != null);
while (swapped) {
swapped = false;
EntryNode temp = head;
//can't swap something with nothing
while (temp.getNext()!=null){
if (temp.getLastName().compareTo(temp.getNext().getLastName()) > 0) {
swapped = true;
//special case for two nodes
if (size == 2) {
//reassign head and tail
tail = temp;
head = temp.getNext();
tail.setPrev(head);
head.setNext(tail);
tail.setNext(null);
head.setNext(null);
}
//if swapping is at head
else {
if (temp == head) {
head = temp.getNext();
temp.setNext(head.getNext());
head.getNext().setPrev(temp);
head.setPrev(null);
head.setNext(temp);
temp.setPrev(head);
}
else {
temp.setNext(temp.getNext().getNext());
temp.setPrev(temp.getNext());
temp.getNext().setNext(temp);
temp.getNext().setPrev(temp.getPrev());
}
}
}
//loop through list
temp = temp.getNext();
}
}
}
答案 0 :(得分:2)
使用merge sort算法,通常是best choice来排序(单个或双重)链表。已经有post讨论了相关的实施问题。
答案 1 :(得分:1)
我认为你应该检查:
while(temp != null)
因为您已经分配了
temp = temp.getNext()
在while
循环结束时。
答案 2 :(得分:0)
简单的方法是将列表内容放入数组中,使用Arrays.sort
对数组进行排序,最后从排序数组中重建列表。