双向链表的排序方法

时间:2012-03-14 02:19:50

标签: java algorithm sorting doubly-linked-list

试图找出如何对我的双向链表进行排序。 我在这里得到一个空指针异常:

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();
        }
    }
}

3 个答案:

答案 0 :(得分:2)

使用merge sort算法,通常是best choice来排序(单个或双重)链表。已经有post讨论了相关的实施问题。

答案 1 :(得分:1)

我认为你应该检查:

while(temp != null)

因为您已经分配了

temp = temp.getNext()

while循环结束时。

答案 2 :(得分:0)

简单的方法是将列表内容放入数组中,使用Arrays.sort对数组进行排序,最后从排序数组中重建列表。