10.對連結串列進行插入排序
阿新 • • 發佈:2021-12-20
演算法描述
對連結串列進行插入排序。
原題連結
https://leetcode-cn.com/problems/insertion-sort-list/
說明
- 將原來的連結串列進行排序後存放到一個新的連結串列上。
- 將新連結串列設定兩個結點指向頭部,一個移動,一個不動。
- 將要排序的連結串列設定兩個結點,一個用來移動,一個用來進行操作。防止覆蓋。
- 一共有3種情況:
- 比 比較的數大
- 比 比較的數小
- 比尾部的數大
時間複雜度
n表示連結串列長度
O(n*n)
程式碼
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* insertionSortList(ListNode* head) { if (!head) { return nullptr; } ListNode* dummy = new ListNode(0); dummy->next = head; ListNode* p = dummy; ListNode* cur = head->next; ListNode* move = cur; ListNode* last = head; last->next = nullptr; while (cur) { p = dummy; while (cur->val >= p->next->val) { p = p->next; if (!p->next) {break;} } if (!p->next && cur->val >= p->val) { p->next = cur; move = cur->next; cur->next = nullptr; cur = move; continue; } if (cur->val < p->next->val) { move = cur; cur = cur->next; move->next = p->next; p->next = move; } } return dummy->next; } };
本文來自部落格園,作者:jsqup,轉載請註明原文連結:https://www.cnblogs.com/jsqup/p/15712275.html