/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */

/**
 * 
 * @param head ListNode类 the head node
 * @return ListNode类
 */
function sortInList( head ) {
    if(head==null||head.next==null){
        return head
    }
    let slow = head,fast = head.next

    while(fast!=null&&fast.next!=null){
        slow = slow.next
        fast = fast.next.next
    }
    let newList = slow.next
    slow.next = null
    return merge(sortInList(head),sortInList(newList))
}
function merge(left,right){
    let newHead = new ListNode(-1)
    let current = newHead
    while(left && right){
        if(left.val<right.val){
            current.next = left
            left = left.next
        }else{
            current.next = right
            right = right.next
        }
        current = current.next
    }
    while(left){
        current.next = left
        left = left.next
        current = current.next
    }
    while(right){
        current.next = right
        right = right.next
        current = current.next
    }
    return newHead.next
}
module.exports = {
    sortInList : sortInList
};