public ListNode sortList(ListNode head) {
//        LinkedList.printList("ReadyForSort : ",head);
        if(head == null || head.next == null) return head;
        ListNode realHead = new ListNode(0);
        realHead.next = head;
        ListNode nspeed = realHead;
        ListNode dspeed = realHead;
        while(dspeed.next != null && dspeed.next.next!=null)
        {
            nspeed = nspeed.next;
            dspeed = dspeed.next.next;
        }
        ListNode newhead = nspeed.next;
        nspeed.next = null;
        ListNode temp1 = this.sortList(newhead);
        ListNode temp2 = this.sortList(realHead.next);
        return this.mergeSort(temp2,temp1);
    }