Sort a linked list using insertion sort.
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode insertionSortList(ListNode head) { if(head==null) return head; int insert = 0; ListNode nextLeft = head; while (true) { //left左邊的node(包括left)是要被遍歷插入的,right是要被插入的node ListNode left = nextLeft; if(left == null) break; ListNode right = left.next; if (right == null) break; ListNode rnext = right.next; //比頭指針還小的情況 if (right.val < head.val) { right.next = head; left.next = rnext; head = right; nextLeft = left; insert++; continue; } int index = insert; ListNode cur = head; ListNode next = head.next; //遍歷尋找比被插入指針小的node,插入到該node的前一node的後面 boolean change = false; while (index != 0) { if (right.val < next.val) { cur.next = right; right.next = next; left.next = rnext; nextLeft = left; change = true; break; } cur = cur.next; next = next.next; index--; } if(!change) nextLeft = left.next; insert++; } return head; } }