分析: O(nlogn)就是用merge sort或者quick sort
用merge sort首先考虑找中点---用快慢指针的方法
merge-- 用merge 2 linkedlist方法
public class Solution { public ListNode sortList(ListNode head) { if (head == null || head.next == null){ return head; } ListNode mid = findmid(head); ListNode right = sortList(mid.next); mid.next = null; ListNode left = sortList(head); return merge(left, right); } private ListNode findmid(ListNode head){ ListNode slow = head; ListNode fast = head.next; while (fast.next != null && fast.next.next != null){ slow = slow.next; fast = fast.next.next; } return slow; } private ListNode merge(ListNode head1, ListNode head2){ ListNode dummy = new ListNode(0); ListNode tail = dummy; while (head1 != null && head2 != null){ if (head1.val < head2.val){ tail.next = head1; tail = tail.next; head1 = head1.next; } else { tail.next = head2; tail = tail.next; head2 = head2.next; } } if (head1 != null){ tail.next = head1; } else { tail.next = head2; } return dummy.next; } }
没有评论:
发表评论