对链表进行插入排序。


插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。
每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。

插入排序算法:

  1. 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
  2. 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
  3. 重复直到所有输入数据插入完为止。

示例 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&&current->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自我总结(对链表进行插入排序)相关推荐

  1. leetcode算法题--对链表进行插入排序

    原题链接:https://leetcode-cn.com/problems/insertion-sort-list/ 1.map ListNode* insertionSortList(ListNod ...

  2. LeetCode 147. 对链表进行插入排序(链表)

    1. 题目 对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的 ...

  3. 插入排序 链表 java_Java实现 LeetCode 147 对链表进行插入排序

    147. 对链表进行插入排序 对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将 ...

  4. leetcode 147. 对链表进行插入排序

    对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中. 插 ...

  5. LeetCode实战:排序链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Sort a link ...

  6. LeetCode实战:删除链表中的节点

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Write a fun ...

  7. LeetCode实战:反转链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Reverse a s ...

  8. LeetCode实战:相交链表

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Write a pro ...

  9. LeetCode实战:环形链表 II

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a lin ...

最新文章

  1. Kibana:分析及可视化日志文件
  2. 《大数据系统基础》实践项目期末答辩顺利举行 校企联手打造精品实践项目见真章
  3. android android studio单元测试实例
  4. 网易云信为你的互联网应用快速接入直播功能
  5. 【Tools】虚拟串口工具之VSPD10
  6. linux 应用网络连接失败的原因,PuTTY网络错误:软件导致连接中止
  7. java应用程序利用Exe4j打包exe文件
  8. java的继承关系linkedlist_LinkedList——JAVA成长之路
  9. python等待线程结束_python线程join
  10. 两个时间相减(vb.net)
  11. macOS 常用字体下载安装
  12. URAL1671 Anansi's Cobweb(离线做 + 并查集)
  13. Ty-Mysql函数笔记
  14. 集成声网(Agora)SDK踩坑集锦系列
  15. 虚拟机安装Ubuntu16.04.6
  16. 微信小程序界面设计小程序中的WXSS(css)选择器课程-伪类-:focus 伪类
  17. 让你效率UP! UP! UP的软件大集锦
  18. 计算机交流大会邀请函范文,交流会的邀请函范文三篇
  19. denclue 聚类_密度分布函数的聚类denclue算法步骤.ppt
  20. 深度解析文本检测网络CTPN

热门文章

  1. 用 npm script 实现服务自动化运维
  2. TypeScript入门教程 之 类/抽象类/构造器/Getter/Setter
  3. Oracle结果集缓存(Result Cache)--服务器、客户端、函数缓存
  4. Linux下创建Oracle的实例
  5. 如何使用 IntelliJ IDEA 2017 配置PHP开发环境 及项目搭建
  6. 磁盘分区20191017
  7. SpringMVC 解决中文乱码的过滤器
  8. 【C语言】构建一个校园交通查询系统程序。能够规划出任意出发地和目的地之间的最短路径。...
  9. PicGo复制自定义链接
  10. Angular / Ionic,React,Vue? 使用Stencil.js面向未来的应用程序!