链表排序:算法-归并排序 public class LinkedSort { private static class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } } private ListNode mergeList(ListNode head1,ListNode head2){ if(head1==null){ return head2; }else if(head2==null){ return head1; } ListNode head=new ListNode(0); ListNode tmp=head; while(head1!=null&&head2!=null){ if(head1.val<=head2.val){ head.next=head1; head1=head1.next; }else{ head.next=head2; head2=head2.next; } head=head.next; } while(head1!=null){ head.next=head1; head1=head1.next; head=head.next; } while(head2!=null){ head.next=head2; head2=head2.next; head=head.next; } return tmp.next;//注意另起一个新的节点 } public ListNode sortList(ListNode head) { if(head==null||head.next==null){ return head; } ListNode first=head; ListNode after=head; // two nodes要特别处理是两个节点的情况 if(head.next.next==null){ first=head.next; head.next=null; return mergeList(head, first); } while(after!=null){ if(after.next!=null){ after=after.next.next; first=first.next; }else{ break; } } ListNode tmp=first.next; first.next=null;//这里容易出现问题,提前将后置节点归null ListNode head1=sortList(head); ListNode head2=sortList(tmp); return mergeList(head1, head2); } public static void main(String[] args){ LinkedSort linkedSort=new LinkedSort(); ListNode head1=new ListNode(9); head1.next=new ListNode(3); head1.next.next=new ListNode(4); head1.next.next.next=new ListNode(1); head1.next.next.next.next=new ListNode(5); ListNode head=linkedSort.sortList(head1); System.out.println("fuck"); while(head!=null){ System.out.println(head.val); head=head.next; } } }