1 package com.lw.leet5;
2
3 /**
4 * @ClassName:Solution
5 * @Description:
6 * Insertion Sort List
7 * Sort a linked list using insertion sort.
8 * @Author LiuWei
9 * @Date 2014年8月20日下午7:50:07
10 * @Mail nashiyue1314@163.com
11 */
12 public class Solution {
13
14 public ListNode insertionSortList(ListNode head) {
15 // if only one or two elements ,return head
16 if(head == null || head.next == null){
17 return head;
18 }
19 ListNode cur = head.next;
20 ListNode tmp = null;
21 while(cur != null){
22 tmp = head;
23 //get the insertion position
24 while(tmp != cur && tmp.val < cur.val){
25 tmp = tmp.next;
26 }
27 //if need insert, switch the value
28 if(tmp != cur){
29 int num1 = cur.val;
30 int num2 ;
31 while(tmp != cur){
32 //store the tmp value
33 num2 = tmp.val;
34 tmp.val = num1;
35 num1 = num2;
36 tmp = tmp.next;
37 }
38 //init cur
39 tmp.val = num1;
40 }
41 cur = cur.next;
42 }
43 return head;
44 }
45
46 public static void main(String args[]) {
47 int[] arr = {10,3,2,4,0,0,-1,2,-2};
48 ListNode head = new ListNode(arr[0]);
49 ListNode curr = head;
50 for(int i=1; i<arr.length; i++){
51 ListNode node = new ListNode(arr[i]);
52 curr.next = node;
53 curr = curr.next;
54 }
55
56 ListNode tmp = new Solution().insertionSortList(head);
57 while(tmp != null){
58 System.out.println(tmp.val);
59 tmp = tmp.next;
60 }
61 }
62
63 }