思路:

插入算法的思想很简单,此题比较为链表数据类型,方便的是不用一个一个的向后移动元素,但是找到应该插入的位置相对麻烦,因为链表只有next指针,无法快速定位要插入的位置。在链表前面插入一个空指针, 指向头节点,方便后续的访问和减少判断。

class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
const int inf = 0x3f3f3f3f;
if(head == NULL) return NULL;
if(head->next == NULL) return head;
//构建一个空指针指向开头
ListNode *headNULL = new ListNode(inf);
headNULL -> next = head;
ListNode *cur = head->next;
head -> next = NULL;
while(cur !=NULL){
ListNode *p = headNULL;
while(p->next != NULL && p->next->val < cur->val){ //当找到第一个大于当前值的节点时,退出循环
p = p->next;
}
//此时p->next 既是第一个大于当前值的节点,p指向应插入位置的前一个节点,即要在p和p->next之间插入当前值
ListNode *tmp = cur->next;
cur -> next = p->next;
p -> next = cur;
cur = tmp;
}
//返回首节点
return headNULL->next;
}
};

最新文章

  1. NuGet多个项目依赖的公共组件如何打包
  2. Android 基于Message的进程间通信 Messenger完全解析
  3. JavaWEB前端向服务器端发送对象
  4. 使用WCF服务的客户端出现maxReceivedMessageSize异常
  5. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App&#39;s Memory
  6. mydumper原理2
  7. jQuery--对话框插件--dialog
  8. [小结][N种方法]实现WPF不规则窗体
  9. BZOJ1095(动态点分治+堆)
  10. FIDDLER的使用方法及技巧总结
  11. Asp.Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty
  12. linux iptables 防火墙简介
  13. GlusterFS六大卷模式說明
  14. 002-redis-数据类型
  15. Nhibernate入门与demo
  16. macOS --- 配置基于域名的虚拟主机
  17. ETL第二篇 调用webservice
  18. Oracle 体系结构四 逻辑和物理存储结构之间的关系
  19. Python_selenium之处理Alert窗
  20. Javaweb的get请求乱码解决

热门文章

  1. Postsql 修改字段长度和类型
  2. Docker启动守护式容器
  3. 【西北师大-2108Java】期中成绩汇总
  4. LG5239 回望京都 组合数+暴力
  5. NLP中的数据增强
  6. json解析模块
  7. 手动创建分区以及软硬raid的问题
  8. 05Shell循环语句
  9. 巧妙利用selenium中的JS操作来处理特殊的文本框
  10. LeetCode | 机器人能否返回原点