力扣 147. 對連結串列進行插入排序
對連結串列進行插入排序。
插入排序的動畫演示如上。從第一個元素開始,該連結串列可以被認為已經部分排序(用黑色表示)。
每次迭代時,從輸入資料中移除一個元素(用紅色表示),並原地將其插入到已排好序的連結串列中。
插入排序演算法:
插入排序是迭代的,每次只移動一個元素,直到所有元素可以形成一個有序的輸出列表。
每次迭代中,插入排序只從輸入資料中移除一個待排序的元素,找到它在序列中適當的位置,並將其插入。
重複直到所有輸入資料插入完為止。
示例 1:
輸入: 4->2->1->3
輸出: 1->2->3->4
示例 2:
輸入: -1->5->3->4->0
輸出: -1->0->3->4->5
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
if(head==nullptr)
return head;
ListNode* dummyhead=new ListNode(0);
dummyhead->next=head;
ListNode* last=head;
ListNode* curr=head->next;
while(curr!=nullptr){
if(last->val<=curr->val){
last=last->next;
}
else{
ListNode* pre=dummyhead;
while(pre->next->val<=curr->val){
pre=pre->next;
}
last->next=curr->next;
curr->next=pre->next;
pre->next=curr;
}
curr=last->next;
}
return dummyhead->next;
}
};
相關文章
- 147. 對連結串列進行插入排序排序
- 力扣--連結串列演算法力扣演算法
- LeetCode-147-對連結串列進行插入排序LeetCode排序
- Go資料結構與力扣—連結串列Go資料結構力扣
- 力扣-203. 移除連結串列元素力扣
- 力扣(LeetCode) -143 重排連結串列力扣LeetCode
- 力扣 leetcode 86. 分隔連結串列力扣LeetCode
- 連結串列-插入排序排序
- TODO-力扣-707. 設計連結串列力扣
- [Golang]力扣LeetBook—初級演算法—連結串列—迴文連結串列(快慢指標)Golang力扣演算法指標
- 力扣學習筆記:142. 環形連結串列 II力扣筆記
- 力扣-83. 刪除排序連結串列中的重複元素力扣排序
- 建立連結串列並進行增加、刪減操作
- 147. Insertion Sort List(插入排序)排序
- 單連結串列增刪改查和歸併插入排序排序
- 連結串列-雙向連結串列
- 連結串列-迴圈連結串列
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 連結串列4: 迴圈連結串列
- 連結串列-單連結串列實現
- 連結串列入門與插入連結串列
- (連結串列)連結串列的排序問題排序
- PHP 使用連結串列實現對映PHP
- 連結串列
- 雙連結串列插入排序例項程式碼排序
- javascript中的連結串列結構—雙向連結串列JavaScript
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- php連結串列PHP
- 連結串列操作
- 連結串列逆序
- 2、連結串列
- 誰說有序連結串列不能進行二分查詢,只是需要進化而已?!
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 連結串列以及golang介入式連結串列的實現Golang
- Linux核心連結串列-通用連結串列的實現Linux
- 資料結構-單連結串列、雙連結串列資料結構