题解 | #单链表的排序# java归并排序
单链表的排序
http://www.nowcoder.com/practice/f23604257af94d939848729b1a5cda08
import java.util.*; public class Solution { public ListNode sortInList (ListNode head) { // write code here if(head == null || head.next == null) return head; ListNode fast = head.next,p = head; while(fast != null && fast.next != null ){ p = p.next; fast = fast.next.next; } ListNode lt = p.next; p.next = null; ListNode l1 = sortInList(head); ListNode l2 = sortInList(lt); return merge(l1,l2); } ListNode merge(ListNode l1 , ListNode l2){ if(l1 == null){ return l2; } if(l2 == null){ return l1; } ListNode head; if(l1.val <= l2.val){ head = l1; l1 = l1.next; } else{ head = l2; l2 = l2.next; } ListNode p = head; while(l1 != null && l2 != null){ if(l1.val < l2.val){ p.next = l1; l1 = l1.next; }else{ p.next = l2; l2 = l2.next; } p = p.next; } if(l1 != null){ p.next = l1; } if(l2 != null){ p.next = l2; } return head; } }