链表排序之归并排序

链表排序之归并排序:

public static ListNode mergeSortList(ListNode head){
        if (null == head || null == head.next){
            return head;
        }
        ListNode slow = head;
        ListNode fast = head;
        ListNode pre = head;
        while (null != fast && null != fast.next){
            pre = slow;
            slow = slow.next;
            fast = fast.next.next;
        }
        pre.next = null;
        return mergeTwoSortList(mergeSortList(head), mergeSortList(slow));
    }
    private static ListNode mergeTwoSortList(ListNode head1, ListNode head2){
        if (null == head1){
            return head2;
        }
        if (null == head2){
            return head1;
        }
        ListNode head = new ListNode(-1);
        ListNode cur = head;
        ListNode cur1 = head1;
        ListNode cur2 = head2;
        while (null != cur1 && null != cur2){
            if (cur2.val < cur1.val){
                cur.next = cur2;
                cur2 = cur2.next;
            }else {
                cur.next = cur1;
                cur1 = cur1.next;
            }
            cur = cur.next;
        }
        if (null != cur1){
            cur.next = cur1;
        }
        if (null != cur2){
            cur.next = cur2;
        }
        return head.next;
    }

排序前:6 2 8 4 9 5 1 3 7

排序后:1 2 3 4 5 6 7 8 9

原文地址:https://www.cnblogs.com/earthhouge/p/11754612.html