来源:https://leetcode.com/problems/insertion-sort-list

Sort a linked list using insertion sort.

方法:

1. 使用一个preHead指向头节点,这样在将节点插入头节点前面时(即某个节点值比头节点小)不需要进行特殊处理

2. 从头节点开始遍历,如果当前节点的下一个节点的值比当前节点的值大,就从头开始遍历找到第一个比当前节点的下一个节点的值大的节点,并插入到它的前面,注意插入时需要同时处理节点移出位置和插入位置的指针。

直接插入排序:

时间复杂度,平均O(n^2),最好O(1),此时节点本身有序,最坏O(n^2)

空间复杂度,需要的辅助存储为O(1)

稳定性,稳定,值相同的元素在排序后相对顺序保持不变

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 class Solution {
10     public ListNode insertionSortList(ListNode head) {
11         ListNode preHead = new ListNode(0);
12         ListNode next = null, node = null, tmpNode = null;
13         preHead.next = head;
14         while(head != null) {
15             next = head.next;
16             if(next != null && next.val < head.val) {
17                 node = preHead;
18                 while(node.next != null && node.next.val <= next.val) {
19                     node = node.next;
20                 }
21                 tmpNode = node.next;
22                 node.next = next;
23                 head.next = next.next;
24                 next.next = tmpNode;
25             } else {
26                 head = head.next;
27             }
28         }
29         return preHead.next;
30     }
31 }// 8 ms

转载于:https://www.cnblogs.com/renzongxian/p/7554016.html

Insertion Sort List(单链表插入排序)相关推荐

  1. LeetCode Insertion Sort List(单链表插入排序)

    题意:给出一个未排序好的单链表,用插入排序来实现排序 代码如下: class Solution {public ListNode insertionSortList(ListNode head){if ...

  2. 6-4 单链表插入排序 (15分)

    6-4 单链表插入排序 (15分) 单链表插入排序 ###目的: 掌握单链表的应用和插入排序的思想. ###内容: 编写一个函数insertion_sort,对一个无序单链表采用插入排序的方式,将其按 ...

  3. LeetCode Sort List(单链表归并排序)

    题意:给出一个单链表,将其排序,要求时间复杂度O(nlgn) 思路:用归并排序,取链表的一半,在取一半时,不用先计算总结点个数,一个每次走两步,一个每次走一步,当走的快的结束是,慢的已经到总结点的一半 ...

  4. [转载] python实现基本算法之插入排序(Insertion Sort)

    参考链接: Python中的插入排序insertion sort 基本算法之插入排序(Insertion Sort) 基本算法-02.插入排序(Insertion Sort)算法 冒泡排序已经发布,大 ...

  5. 插入排序(Insertion Sort)-Java实现

    插入排序(Insertion Sort)算法简介: 插入排序是一种丛序列左端开始依次对数据进行排序的算法.在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据. 插入排序(Inserti ...

  6. 单链表的应用--对单链表排序

      对单链表进行排序,利用前文写好的链表的框架,在链表类中补充Sort方法. 对单链表排序 一.问题分析 二.代码分析 1.链表类LinkList 2.链表方法Sort 三.测试代码 1.主函数 2. ...

  7. LeetCode 147. Insertion Sort List 链表插入排序 C++/Java

    LeetCode 147. Insertion Sort List 链表插入排序 C++/Java Sort a linked list using insertion sort. A graphic ...

  8. 【练习】c++删除链表倒数第K个结点和 插入排序算法将单链表递增排序

    删除单链表倒数第K个结点 运行结果: 代码: struct node {int data;node* next;}; //删除链表的倒数第k个结点 bool delet(node*& L, i ...

  9. Java实现插入排序及其优化 insertion sort

    本文带来八大排序算法之插入排序. 插入排序(Insertion Sort)属于内部排序算法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的. 插入排序基本思想: 把n个待排序的元 ...

最新文章

  1. 深copy 和 浅copy 解析
  2. 是什么使你留在你的公司
  3. 初步了解OpenSSL命令
  4. HDU5971【瞎搞】
  5. 越老越值钱,除了程序员!
  6. Linux_PAM_用户之间的信息传递
  7. C++实现:自定义数组类型实现相关运算符重载
  8. 高级JAVA - 利用函数式接口实现通用的取并集/交集/差集
  9. 【Flink】Flink No JAAS configuration section named Client ERROR:Authentication failed
  10. java xml annotation_Annotation与XML配置ID生成策略
  11. 小程序列表倒计时使用wxs实现
  12. es 同步期间数据更新_在大流行期间成为数据科学家的感觉如何
  13. PYTHON地理出图配色及旁门左道
  14. 邮件群发海外服务器,国内与国外在邮件群发营销中的差别
  15. Pycharm Debugger - Frames Not Available
  16. 视频教程-python全栈习题课-Python
  17. 记笔记,手写与打字哪个更有效?
  18. 机器人跳街舞 机智过人_揭秘《机智过人》400台机器人热舞的黑科技
  19. 如何压缩Json格式数据,减少Json数据的体积?
  20. 如何使用U盘储存4G以上的大文件,比如说镜像文件

热门文章

  1. 如何启动mongoDB并用Robo 3T连接
  2. mybatis传set参数
  3. JAVAEE框架之SpringMVC基础
  4. qt爬取网页信息_豆瓣TOP250数据爬取
  5. Scala入门到精通—— 第二节Scala基本类型及操作、程序控制结构
  6. Java多线程之优先级setPriority
  7. DDoS攻击惯犯图鉴
  8. html读取C#参数问题
  9. java和js获取当前天之后或之前7天(任意)日期
  10. JS 内置对象 String对象