Java 通过改变节点对双链表应用快速排序算法

Java 通过改变节点对双链表应用快速排序算法,java,quicksort,partitioning,Java,Quicksort,Partitioning,我需要使用快速排序算法对双链表进行排序。使用递归进行排序。我的分区函数和我们在数组中使用的一样。 但我在跟踪每个列表中当前的头节点和尾节点时遇到了困难 public void sort() { Node la = getLast(head); last = la; quickSort(head, last); } public void quickSort(Node newhead, Node newlast) { if(newhead == null ||

我需要使用快速排序算法对双链表进行排序。使用递归进行排序。我的分区函数和我们在数组中使用的一样。 但我在跟踪每个列表中当前的头节点和尾节点时遇到了困难

public void sort() {
    Node la = getLast(head);
    last = la;
    quickSort(head, last);
}

public void quickSort(Node newhead, Node newlast) {

    if(newhead == null || newlast == null) {
        return;
    }
    if(newhead == newlast) {
        return;
    }
    Node parti = partition(newhead,newlast);

    if(parti != head)
        quickSort(newhead, parti.prev);
    if(parti != last)
        newlast = acualTail;
        quickSort(parti.next, newlast);


}

public Node partition(Node newHead, Node newLast) {

    //Node actHead = newHead;
    //Node acLast = newLast;
    Node current = newHead;
    Node p = newLast;

    while(current != p) {

        if(current.data > p.data) {
            Node next = current.next;
            current.next.prev = current.prev;
            if(current.prev != null)
                current.prev.next = current.next;
            current.next = newLast.next;
            current.prev = newLast; 
            newLast.next = current;

            //head = next;
            if(current == newHead)
                newHead = next;
            newLast = current;
            current = next;
        }
        else {
            current = current.next;

        }
    }


    head= newHead;
    last = newLast;
    return p;
}
我就是这样做的

public Node getLast(Node head) {
    Node current = head;
    while(current.next != null) {
        current = current.next;
    }

    return current;
}

public void sort() {
    Node la = getLast(head);
    quickSort(head, la);
    head = actualHead;
}

public void quickSort(Node head, Node last) {

    if(head == last)
        return;
    if(head == null || last == null)
        return;
    if(last.next == head)
        return;

    Node partition = partition(head, last);

    Node newHead = this.head;
    Node newTail = this.last;


    quickSort(newHead, partition.prev);

    if(actualHead == null)
    {
        actualHead = newHead;
    }

    quickSort(partition.next, newTail);

}

public Node partition(Node head, Node last) {
    Node current = head;
    Node p = last;

    while(current != p) {

        if(current.data > p.data) {
            Node next = current.next;
            current.next.prev = current.prev;
            if(current.prev != null)
                current.prev.next = current.next;
            current.next = last.next;
            current.prev = last; 
            last.next = current;

            if(current == head)
                head = next;
            last = current;
            current = next;
        }
        else {
            current = current.next;

        }
    }
    this.head = head;
    this.last = last;
    return p;
}

我看不出有什么特别的问题……或者你希望现在有解决方案吗?或者调试代码的人?问题是如何在双链接列表上应用快速排序?我写这段代码是因为它不起作用。不过,只要稍加修改或找到解决方案就好了……友好的建议,创建一个单独的方法来交换节点,即
交换节点(左节点,右节点)
。这将大大简化
分区
方法逻辑