Sort a linked list using insertion sort.

代码如下:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 public class Solution {
10     public ListNode insertionSortList(ListNode head) {
11         if(head==null||head.next==null)
12         return head;
13         
14         ListNode pre=head;
15         ListNode q=head.next;
16         ListNode p=head;
17         while(q!=null)
18         {
19        
20             if(q.val<=head.val)
21             {
22                 pre.next=q.next;
23                 q.next=head;
24                 head=q;
25                 if(pre.next==null)
26                 break;
27                 else q=pre.next;
28                 p=head;
29             }
30             else
31             if(q.val>=p.val&&q.val<p.next.val)
32             {
33                 pre.next=q.next;
34                 q.next=p.next;
35                 p.next=q;
36                 if(pre.next==null)
37                 break;
38                 else q=pre.next;
39                 p=head;
40             }
41             else if(q.val>=p.val&&q.val>p.next.val)
42             { p=p.next;
43             }
44             else if(q.val==p.next.val&&p.next!=q)//用于有重复元素时的排序
45             {p=p.next;}
46             else {
47                 p=head;
48                 pre=pre.next;
49                 q=pre.next;
50             }
51             ListNode c=head;
52 
53         }
54         
55         return head;
56     }
57      
58 }