【HDU-5238】Calculator(中國剩餘定理CRT+線段樹亂搞)
阿新 • • 發佈:2020-11-20
插入排序的動畫演示如上。從第一個元素開始,該連結串列可以被認為已經部分排序(用黑色表示)。每次迭代時,從輸入資料中移除一個元素(用紅色表示),並原地將其插入到已排好序的連結串列中
解題思路
插入排序演算法想必大家都不陌生了,如果不瞭解的話來看看下面這篇部落格吧
難點在於這是個單向連結串列,不能向陣列一樣直接從後往前遍歷,因此我們每找到一個不符合排序規則的元素,都必須從頭再遍歷,找到合適的插入點,而這又考察到有關連結串列的操作
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode insertionSortList(ListNode head) { if(head == null) { return head; } ListNode dummyHead = new ListNode(-1); dummyHead.next = head; ListNode lastNode = head, curNode = head.next; while(curNode != null) { if(lastNode.val <= curNode.val) { lastNode = lastNode.next; } else { ListNode preNode = dummyHead; while(preNode.next.val <= curNode.val) { preNode = preNode.next; } lastNode.next = curNode.next; curNode.next = preNode.next; preNode.next = curNode; } curNode = lastNode.next; } return dummyHead.next; } }