牛客經典筆刷演算法題-LC5-連結串列的插入排序
阿新 • • 發佈:2020-12-13
牛客經典筆刷演算法題-LC5-連結串列的插入排序
題目描述
使用插入排序對連結串列進行排序。
示例
輸入
{30,20,40}
返回值
{20,30,40}
思路
通過虛擬頭節點處理連結串列排序
插入排序演算法描述:
- 步驟一:從第一個元素開始,該元素可以認為已經被排序;
- 步驟二:取出下一個元素,在已經排序的元素序列中從後向前掃描;
- 步驟三:如果該元素(已排序)大於新元素,將該元素移到下一位置;
- 步驟四:重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;
- 步驟五:將新元素插入到該位置後;
- 步驟六:重複步驟二~五
解答
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @param head ListNode類 * @return ListNode類 */ public ListNode insertionSortList (ListNode head) { if(head == null || head.next == null) return head; // 虛節點 ListNode dummy = new ListNode(-1), pre; dummy.next = head; while(head != null && head.next != null){ // 如果小於下一節點,直接跳過,加速排序 if(head.val <= head.next.val){ head = head.next; continue; } // 尋找當前節點正確位置 pre = dummy; while(pre.next.val < head.next.val) pre = pre.next; // 取出當前節點curr ListNode curr = head.next; //儲存下一節點 head.next = curr.next; // 插入操作 curr.next = pre.next; pre.next = curr; } return dummy.next; } }