題目描述
對鍊錶進行插入排序。
插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序(用黑色表示)。
每次迭代時,從輸入資料中移除乙個元素(用紅色表示),並原地將其插入到已排好序的鍊錶中。
插入排序演算法:
插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。
每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。
重複直到所有輸入資料插入完為止。
示例 1:
輸入: 4->2->1->3
輸出: 1->2->3->4
示例 2:
輸入: -1->5->3->4->0
輸出: -1->0->3->4->5
題解:
插入排序的思想是非常簡單的,題目已經說了插入排序過程。
但是這題是在鍊錶上進行的,所以稍微有一點麻煩,我們需要記錄有序部分最後乙個節點,記為尾節點,然後做以下操作:
時間複雜度:o(n
2)
o(n^2)
o(n2)
額外空間複雜度:o(1
)o(1)
o(1)
/**
* definition for singly-linked list.
* struct listnode
* listnode(int x) : val(x), next(nullptr) {}
* listnode(int x, listnode *next) : val(x), next(next) {}
* };
*/class
solution
else
now = tail-
>next;
}return dummy-
>next;}}
;/*記憶體:9.4mb,擊敗:92.76%
*/
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 ...