147 對鍊錶進行插入排序

2022-08-02 17:03:10 字數 770 閱讀 2195

插入排序演算法:插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。

示例 1

輸入: 4->2->1->3

輸出: 1->2->3->4

示例 2

輸入: -1->5->3->4->0

輸出: -1->0->3->4->5

class listnode

}//遍歷節點,將值較小的節點從頭遍歷直到找到合適的位置。

class solution

listnode dummy = new listnode(-1);//處理鍊錶時,新增空節點為頭部可以避免特殊處理第乙個節點

dummy.next = head;

listnode insertnode = dummy;

listnode temp;

while (head.next!=null){

if (head.val > head.next.val){

temp = head.next;

head.next = head.next.next;

if(temp.val使用了雙重迴圈,最糟糕的情況是倒序的鍊錶,時間複雜度為 \(o(n^2)\),只使用了常數個變數,空間複雜度為 \(o(1)\)。

147 對鍊錶進行插入排序

對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。definition for singly linked list.public class listnode ...

147 對鍊錶進行插入排序

難度 中等 題目描述 思路總結 為什麼鍊錶題中等難度的都能做出來,而其它型別的題不行呢,值得思考。題解一 class solution def insertionsortlist self,head listnode listnode dummy listnode 0 while head cur ...

147 對鍊錶進行插入排序

第一次嘗試 對鍊錶進行插入排序。鍊錶為無頭結點 單向 不迴圈。由於涉及到結構體,所以寫不了完整的測試 下面展示的 為leetcode中寫的 leetcode鏈結 struct listnode insertionsortlist struct listnode head 設定虛頭結點 struct ...