题目:

对链表进行插入排序。

插入排序算法:

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

思路:

1.因为不是双链表,所以无法像线性表一样从尾部比较的,插入,所以只能从排序好的地方从头开始比较
2.为了更方便,我可以设置一个指针指向排列好的队伍的最后一个,当要比较的节点值,比那个指针大,直接就排列好了,
否则就进入内层循环
3.内层循环就是老路子,从头开始遍历,之后插入
4.这里有个坑就是它的头可能会变,所以不可能只指向head的那个头节点,要重新设定一个伪头指针,确定第一个的位置。

代码:

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
ListNode* dummy=new ListNode(0);
ListNode* pre;
dummy->next=head;
while(head&&head->next)
{
if(head->val<head->next->val)
{
head=head->next;
continue;
}
pre=dummy;
while(pre->next->val<head->next->val)
{
pre=pre->next;
}
ListNode* cur=head->next;
head->next=cur->next;
cur->next=pre->next;
pre->next=cur;
}
return dummy->next; }
};

最新文章

  1. 请写一个php函数,可以接受任意数量的参数
  2. file_get_contents()/file_put_contents()
  3. 全选、取消、2级 checkbox的选中切换
  4. java中的条件语句(if、if...else、多重if、嵌套if)
  5. 下载老版本的Xcode
  6. 一个相比jdk的io包更方便处理数据读写的包
  7. Linux自动删除n天前备份
  8. 转载:Windows Phone 8.1 投影我的屏幕使用教程
  9. view上添加点手势 button无法响应点击事件
  10. Swift global function(count indexOfObject contains...)
  11. jquery如何自定义插件(扩展实例/静态方法)
  12. 【git】切换分支获取代码
  13. Linux的环境变量配置
  14. Sql语句varchar或nvarchar字段条件前加N的性能差异
  15. find 命令的误差估值与单位调整
  16. 使用JavaScript实现单向链表
  17. xterm配置
  18. 最长上升子序列(dp)
  19. 批处理文件 bat 后台运行
  20. Java中的钩子方法

热门文章

  1. C语言的指针数组与指针数组
  2. redis 基本操作命令
  3. window系统安装mysql
  4. PDF 文件编写器 C# 类库(版本 1.28.0)使用详解
  5. IDEA 通过ctrl+滚轮缩放字体大小
  6. 『言善信』Fiddler工具 — 4、Fiddler面布局详解【工具栏】
  7. Ascend Pytorch算子功能验证
  8. zookeeper分布式锁,解决了羊群效应, 真正的zookeeper 分布式锁
  9. 【MySQL】MySQL Workbench 8.0 CE 界面汉化
  10. js 统计图插件chart.js