C++实现LeetCode(147.链表插入排序)
[LeetCode] 147. Insertion Sort List 链表插入排序
Sort a linked list using insertion sort.
A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list.
With each iteration one element (red) is removed from the input data and inserted in-place into the sorted list
Algorithm of Insertion Sort:
- Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list.
- At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there.
- It repeats until no input elements remain.
Input: 4->2->1->3Example 2:
Output: 1->2->3->4
Input: -1->5->3->4->0链表的插入排序实现原理很简单,就是一个元素一个元素的从原链表中取出来,然后按顺序插入到新链表中,时间复杂度为 O(n2),是一种效率并不是很高的算法,但是空间复杂度为 O(1),以高时间复杂度换取了低空间复杂度,参见代码如下:
Output: -1->0->3->4->5
class Solution {public:ListNode* insertionSortList(ListNode* head) {ListNode *dummy = new ListNode(-1), *cur = dummy; while (head) {ListNode *t = head->next; cur = dummy; while (cur->next && cur->next->val <= head->val) {cur = cur->next; }head->next = cur->next; cur->next = head; head = t; }return dummy->next; }};
【C++实现LeetCode(147.链表插入排序)】Github 同步地址:
https://github.com/grandyang/leetcode/issues/147
类似题目:
Sort List
Insert into a Cyclic Sorted List
参考资料:
https://leetcode.com/problems/insertion-sort-list/
https://leetcode.com/problems/insertion-sort-list/discuss/46423/Explained-C%2B%2B-solution-(24ms)
https://leetcode.com/problems/insertion-sort-list/discuss/46420/An-easy-and-clear-way-to-sort-(-O(1)-space-)
到此这篇关于C++实现LeetCode(147.链表插入排序)的文章就介绍到这了,更多相关C++实现链表插入排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- java中如何实现重建二叉树
- leetcode|leetcode 92. 反转链表 II
- 人脸识别|【人脸识别系列】| 实现自动化妆