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:

  1. Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list.
  2. 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.
  3. It repeats until no input elements remain.

Example 1:

Input: 4->2->1->3
Output: 1->2->3->4

Example 2:

Input: -1->5->3->4->0
Output: -1->0->3->4->5

链表的插入排序实现原理很简单,就是一个元素一个元素的从原链表中取出来,然后按顺序插入到新链表中,时间复杂度为 O(n2),是一种效率并不是很高的算法,但是空间复杂度为 O(1),以高时间复杂度换取了低空间复杂度,参见代码如下:

class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
ListNode *dummy = new ListNode(-), *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;
}
};

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-)

LeetCode All in One 题目讲解汇总(持续更新中...)

最新文章

  1. 【学习篇:他山之石,把玉攻】jquery实现调用webservice
  2. Web Applicationservlet,cookie,session
  3. Wakatime 测试工作时间
  4. a版本冲刺第二天
  5. oracle 常用函数【转】
  6. BZOJ1391: [Ceoi2008]order
  7. SQL Server里简单参数化的痛苦
  8. mysql for python,银行转账模拟
  9. MySQL Command Line Client显示中文的部分为空
  10. Linux之read命令使用
  11. 基于Grunt构建一个的项目
  12. 深入浅出mybatis之返回主键ID
  13. 虚拟机模拟SSD用于Ceph测试
  14. 转帖 IBM要推POWER9,来了解一下POWER处理器的前世今生
  15. 原:Myeclipse10+Egit+bitbucket实现版本控制
  16. CF 463A &amp;&amp; 463B 贪心 &amp;&amp; 463C 霍夫曼树 &amp;&amp; 463D 树形dp &amp;&amp; 463E 线段树
  17. Hadoop文件系统支持释疑之S3
  18. set是无序集合,放入set中的元素通过iterator输出时候是无序的
  19. [转] Linux 中提高 VsFTP 服务器的安全性
  20. C# 发送Http协议 模拟 Post Get请求

热门文章

  1. 简单封装分页功能pageView.js
  2. asp.net webform 自定义分页控件
  3. 和Java相关的书籍,想成为架构师的请收藏一下啊
  4. [Oracle] Bulk Insert Data
  5. 关于 .NET Core 动态链接库的开发
  6. 关于i++引出的线程不安全性的分析以及解决措施
  7. redis开启远程访问
  8. Linux(十)___iptables防火墙
  9. Threejs中的材质贴图
  10. Dynamics CRM 之ADFS 使用 SQL Server 的联合服务器场