1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| class Solution { public ListNode sortList(ListNode head) { if(head == null || head.next == null) { return head; }
ListNode head2 = middleNode(head); head = sortList(head); head2 = sortList(head2); return mergeTwoList(head,head2); }
private ListNode middleNode(ListNode head) { ListNode pre = head; ListNode slow = head; ListNode fast = head; while(fast != null && fast.next != null) { pre = slow; slow = slow.next; fast = fast.next.next; } pre.next = null; return slow; }
private ListNode mergeTwoList(ListNode list1, ListNode list2) { ListNode dummy = new ListNode(0); ListNode cur = dummy; while(list1 != null && list2 != null) { if(list1.val < list2.val) { cur.next = list1; list1 = list1.next; } else { cur.next = list2; list2 = list2.next; } cur = cur.next; } if(list1 != null) { cur.next = list1; } if(list2 != null) { cur.next = list2; } return dummy.next; } }
|