2
* Definition for singly-linked list. public class ListNode { int val; ListNode next; ListNode() {}3
* ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val;4
* this.next = next; } }7
public ListNode sortList(ListNode head) {8
if (head == null || head.next == null) {12
ListNode mid = middle(head);14
ListNode left = sortList(head);15
ListNode right = sortList(mid);17
return mergeTwoLists(left, right);20
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {21
ListNode head = new ListNode();23
while (list1 != null && list2 != null) {24
if (list1.val < list2.val) {35
tail.next = (list1 != null) ? list1 : list2;40
public ListNode middle(ListNode head) {41
ListNode midprev = null;42
while (head != null && head.next != null) {43
midprev = (midprev == null) ? head : midprev.next;44
head = head.next.next;46
ListNode mid = midprev.next;