【LeetCode】-Sort List

来源:互联网 发布:windows 设置字符集 编辑:程序博客网 时间:2024/06/10 00:52

Sort a linked list in O(n log n) time using constant space complexity.

/** * 解题思路: * 分治递归的思想:1.将整个链表一分为二;2.对左右子链分别排序;3.将左右子链合并。 *  * Definition for singly-linked list. * class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {        private ListNode findMid( ListNode head ){ListNode slow = head;ListNode fast = head.next;while( fast!=null && fast.next!=null ){fast = fast.next.next;slow = slow.next;}return slow;}private ListNode mergeList( ListNode h1, ListNode h2 ){ListNode head = new ListNode(0);ListNode tail = head;while( h1!=null && h2!=null ){if( h1.val>=h2.val ){tail.next = h2;h2 = h2.next;}else{tail.next = h1;h1 = h1.next;}tail = tail.next;}if( h1!=null ){tail.next = h1;}else{tail.next = h2;}return head.next;}            public ListNode sortList(ListNode head) {            if( head==null || head.next==null )    return head;    ListNode mid = findMid(head);    ListNode h1 = sortList(mid.next);    mid.next = null;    ListNode h2 = sortList(head);        return mergeList(h1,h2);             }}


0 0
原创粉丝点击