LeetCode自我总结(对链表进行插入排序)
对链表进行插入排序。
插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。
每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。
插入排序算法:
- 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
- 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
- 重复直到所有输入数据插入完为止。
示例 1:
输入: 4->2->1->3 输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0 输出: -1->0->3->4->5
class Solution {
public:
ListNode* insertionSortList(ListNode* head)
{
if(!head||!head->next)
{
return head;
}
ListNode* newhead=new ListNode(-1);//常用技巧,新建头结点
newhead->next=head;
ListNode* pre=newhead;//这个指针的目的是每一次找插入的位置都要从头结点开始遍历
ListNode* current=head;//这个指针是当前我们需要操作的节点前一个节点
while(current)
{
if(current->next!=NULL&¤t->val>current->next->val)//若当前节点大于下一个节点,需要找位置移动插入了
{
while(pre->next!=NULL&&pre->next->val<current->next->val)
{
pre=pre->next; //遍历找到要插入的位置
}
ListNode* temp=pre->next; //为什么不是current呢,因为不一定要插入的位置正好是current的前面,但一定插入在pre的后面
pre->next=current->next;
current->next=current->next->next;
pre->next->next=temp;
pre=newhead;
}
else
{
current=current->next;
}
}
return newhead->next;
}
};
LeetCode自我总结(对链表进行插入排序)相关推荐
- leetcode算法题--对链表进行插入排序
原题链接:https://leetcode-cn.com/problems/insertion-sort-list/ 1.map ListNode* insertionSortList(ListNod ...
- LeetCode 147. 对链表进行插入排序(链表)
1. 题目 对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的 ...
- 插入排序 链表 java_Java实现 LeetCode 147 对链表进行插入排序
147. 对链表进行插入排序 对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将 ...
- leetcode 147. 对链表进行插入排序
对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中. 插 ...
- LeetCode实战:排序链表
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Sort a link ...
- LeetCode实战:删除链表中的节点
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Write a fun ...
- LeetCode实战:反转链表
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Reverse a s ...
- LeetCode实战:相交链表
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Write a pro ...
- LeetCode实战:环形链表 II
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a lin ...
最新文章
- Kibana:分析及可视化日志文件
- 《大数据系统基础》实践项目期末答辩顺利举行 校企联手打造精品实践项目见真章
- android android studio单元测试实例
- 网易云信为你的互联网应用快速接入直播功能
- 【Tools】虚拟串口工具之VSPD10
- linux 应用网络连接失败的原因,PuTTY网络错误:软件导致连接中止
- java应用程序利用Exe4j打包exe文件
- java的继承关系linkedlist_LinkedList——JAVA成长之路
- python等待线程结束_python线程join
- 两个时间相减(vb.net)
- macOS 常用字体下载安装
- URAL1671 Anansi's Cobweb(离线做 + 并查集)
- Ty-Mysql函数笔记
- 集成声网(Agora)SDK踩坑集锦系列
- 虚拟机安装Ubuntu16.04.6
- 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:focus 伪类
- 让你效率UP! UP! UP的软件大集锦
- 计算机交流大会邀请函范文,交流会的邀请函范文三篇
- denclue 聚类_密度分布函数的聚类denclue算法步骤.ppt
- 深度解析文本检测网络CTPN
热门文章
- 用 npm script 实现服务自动化运维
- TypeScript入门教程 之 类/抽象类/构造器/Getter/Setter
- Oracle结果集缓存(Result Cache)--服务器、客户端、函数缓存
- Linux下创建Oracle的实例
- 如何使用 IntelliJ IDEA 2017 配置PHP开发环境 及项目搭建
- 磁盘分区20191017
- SpringMVC 解决中文乱码的过滤器
- 【C语言】构建一个校园交通查询系统程序。能够规划出任意出发地和目的地之间的最短路径。...
- PicGo复制自定义链接
- Angular / Ionic,React,Vue? 使用Stencil.js面向未来的应用程序!