LC.147. Insertion Sort List
https://leetcode.com/problems/insertion-sort-list/description/
Sort a linked list using insertion sort.
insertion sort 默认第一位已经SORT 好了, 取出下一位,然后从头比较。 一点一点向后面挪动
time complexity: o(n^2)
space complexity: o(1)
1 public ListNode insertionSortList(ListNode head) {
2 if (head == null || head.next == null) return head;
3 ListNode dummy = new ListNode(0);
4 dummy.next = head ;
5 ListNode curr = head ;
6 ListNode temp = null ;
7 ListNode pre = null ; // this is used for the head
8 // if curr.next == null, means already at the end, no sort needed.
9 while (curr != null && curr.next != null){
10 if (curr.val<=curr.next.val){
11 curr = curr.next ;
12 } else{
13 /* -1 -2 0 1 5
14 d c---->1
15 p
16 * */
17 temp = curr.next ; //temp = 0
18 curr.next = temp.next ; //-2 -> 1
19 pre = dummy; //start from beg.
20 /* -1 -2 1 5 | 0
21 * p p' p''
22 * */
23 //since we are comparing from the dummy, the head could be changed
24 while (pre.next.val <= temp.val){
25 pre = pre.next; //head not changed
26 }
27 temp.next= pre.next;
28 /*works for both change dummy.next and middle condition:
29 如果一开始的话,DUMMY 和 PRE 是指向一个 OBJ
30 */
31 pre.next = temp ;
32 }
33 }
34 return dummy.next;
35 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步