/** * Sort a linked list using insertion sort. * * Tags: Linkedlist, Sort */ class InsertionSortList { public static void main(String[] args) { } /** * Check the list one by one to find a node that has smaller value than * nodes before it and swap */ public static ListNode insertionSortList(ListNode head) { if (head == null || head.next == null) return head; ListNode pre = new ListNode(0); pre.next = head; for (ListNode p = head.next, prev = head; p != null; prev = p, p = p.next) { for (ListNode c = pre; c.next != p; c = c.next) { if (c.next.val > p.val) { prev.next = p.next; // skip p p.next = c.next; // insert between cur and cur.next c.next = p; p = prev; // p is inserted to somewhere in the front, reset break; } } } return pre.next; } public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } } }