Insertion Sort List(单链表插入排序)
来源: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)
稳定性,稳定,值相同的元素在排序后相对顺序保持不变
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode insertionSortList(ListNode head) {
ListNode preHead = new ListNode(0);
ListNode next = null, node = null, tmpNode = null;
preHead.next = head;
while(head != null) {
next = head.next;
if(next != null && next.val < head.val) {
node = preHead;
while(node.next != null && node.next.val <= next.val) {
node = node.next;
}
tmpNode = node.next;
node.next = next;
head.next = next.next;
next.next = tmpNode;
} else {
head = head.next;
}
}
return preHead.next;
}
}// 8 ms
Insertion Sort List(单链表插入排序)的更多相关文章
- leetcode——Insertion Sort List 对链表进行插入排序(AC)
Sort a linked list using insertion sort. class Solution { public: ListNode *insertionSortList(ListNo ...
- 9. Sort List && Insertion Sort List (链表排序总结)
Sort List Sort a linked list in O(n log n) time using constant space complexity. H ...
- Leetcode147. Insertion Sort List对链表进行插入排序
对链表进行插入排序. 从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中. 插入排序算法: 插入排序是 ...
- [算法] 单链表插入排序(java)
实现 首先保证插入前的链表是个完整的,最后一个节点要断开 然后在插入前链表中找到比待插入节点大的最小元素,插到前面即可 Link.java class Link { private class Nod ...
- insertion sort list (使用插入排序给链表排序)
Sort a linked list using insertion sort. 对于数组的插入排序,可以参看排序算法入门之插入排序(java实现),遍历每个元素,然后相当于把每个元素插入到前面已经排 ...
- 排序算法--插入排序(Insertion Sort)_C#程序实现
排序算法--插入排序(Insertion Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...
- 【leetcode】Insertion Sort List (middle)
Sort a linked list using insertion sort. 思路: 用插入排序对链表排序.插入排序是指每次在一个排好序的链表中插入一个新的值. 注意:把排好序的部分和未排序的部分 ...
- leetcode 名单 Insertion Sort List
Insertion Sort List Total Accepted: 24444 Total Submissions: 96639My Submissions Sort a linked list ...
- LeetCode(147) Insertion Sort List
题目 Sort a linked list using insertion sort. 分析 实现链表的插入排序 注意: 程序入口的特殊输入判断处理! 节点的链接处理,避免出现断链! AC代码 /** ...
随机推荐
- 知名界面类控件Kendo UI for jQuery R2 2019 SP1发布|附下载
Kendo UI for jQuery提供了在短时间内构建现在Web应用程序所需要的一切.从70多个UI中选择,并轻松地将它们组合起来,创建出酷炫响应式的应用程序,同时将开发时间加快了50%. [适用 ...
- create-react-app踩坑记
前言 哇,不的不说这个react 这个脚手架create-react-app脚确实有很多问题,哈哈,下面来看看吧有哪些坑: 引用sass或者less 记得16年还是几年是不支持sass,和less的, ...
- 动态树(Link-Cut-Tree)简单总结(指针版本)
Link-Cut-Tree(动态树 LCT) 1.定义 1. 偏爱子节点: 一颗子树内最后访问的点若在该子树根节点 X 的某个儿子节点 P 的子树中,则称 P 为 X 的偏爱子节点. 偏爱边:连向偏爱 ...
- 软件的三大类型-单机类型、BS类型、CS类型
单机类型:最开始的软件就是那些不需要联网的单机软件. CS类型:有的程序需要统一管理软件中使用的数据, 所以就将保存数据的数据库统一存放在一台主机中, 所有的用户在需要数据时都要从主机获取, 这时就分 ...
- 对items函数的理解
老师:dict的items应该是把dict转成列表,每个列表元素是一个包含key ,value的dict,元素应该是元组, {a:1, b:2, c:3} [(a, 1), (b,2), (c, ...
- 2019 第十届 SWPUCTF writeup(Pwn)
p1KkHeap 0.环境 1.文件信息 2.文件开启的保护 3.IDA分析 main函数 add show edit delete delete功能出现了指针悬浮的问题,配合上tcache,可以任意 ...
- Levenberg-Marquardt优化和zipf分布
最近审论文和看报告中遇到LM优化和齐普夫分布,于是查了一下. LM方法是高斯牛顿迭代方法的改进,下面分别是高斯牛顿.齐普夫方法的公式: Δ=−(JfTJf)−1JfTf,Δ=−(JfTJf+λI)−1 ...
- arch+xfce4音量控制快捷键插件
音量控制快捷键插件: sudo pacman -S xfce4-volumed
- node 中process进程argv,argv0,execArgv,execPath
1.argv const {argv,argv0,execPath v,execPath} = process; argv.forEach(item=>{ console.log(item); ...
- windows下 申请免费ssl证书的方法 (letsencrypt)
Let's Encrypt,官网是https://letsencrypt.org/,它是一个由各大公司赞助的公益组织: 有趋势有需求,自然也有免费可用.免费的SSL证书中,首推就是Let's Encr ...