public static void main(String[] args) { ListNode l1 =new ListNode(1); ListNode l2 =new ListNode(2); ListNode l3 =new ListNode(3); ListNode l4 =new ListNode(4); ListNode l5 =new ListNode(5); ListNode l6 =new ListNode(6); /* * l1.next =l4; l4.next =l6; l6.next =l2; */ l2.next =l1; l3.next =l5; ListNode twoNumbers = new Main4().sortList(l2); while(twoNumbers!=null){ System.out.print(twoNumbers.val +" "); twoNumbers = twoNumbers.next; } } //递归做归并排序 public ListNode sortList(ListNode head) { if(head ==null || head.next ==null){ return head; } ListNode first = head; ListNode mid = getMid(head); ListNode second = mid.next; mid.next =null; first = sortList(first); second = sortList(second); return merge(first,second); } // 获取链表中节点 private ListNode getMid(ListNode node){ ListNode slow =node; ListNode fast = node.next; while( fast!=null && fast.next!=null){ slow = slow.next; fast = fast.next.next; } return slow; } // 合并两个有序链表 private ListNode merge(ListNode first , ListNode second){ if(first ==null){ return second; } if(second == null){ return first; } ListNode root = new ListNode(0); ListNode tmp = root; while(first!=null && second!=null){ if(first.val < second.val){ tmp.next = first; tmp =tmp.next; first =first.next; }else{ tmp.next = second; tmp =tmp.next; second =second.next; } } if(first ==null){ tmp.next = second; } if(second ==null){ tmp.next = first; } return root.next; }