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 }
浙公网安备 33010602011771号