ACM-单向链表插入排序算法(在原链表上操作)
2024-09-07 12:45:58
/*
1.若链表只有一个节点或者为空,直接返回
2.将链表的前两个节点排序,并将排序之后的第二个节点的下一个节点赋空
3.此时整个链表分为了两个,将未排序的节点一一插入到已排序链表中:
3.1.第一种情况,待插入节点比排序链表的头节点小
3.2.第二种情况,待插入节点比排序链表的最后节点大
3.3.第三种情况,待插入节点可插入到排序链表中
*/
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
//输入为空或者只有一个节点
if(!head || !head->next)return head;
ListNode *unSortCur = head->next->next;
if(head->val > head->next->val)
{
ListNode *p = head;
head = head->next;
head->next = p;
p->next = nullptr;
}
else
head->next->next = nullptr;
while(unSortCur != nullptr) //QQQ
{
ListNode *sortPre = head;
ListNode *sortCur = sortPre->next;
ListNode *unSortNext = unSortCur->next;
if(unSortCur->val < head->val)
{
unSortCur->next = head;
head = unSortCur;
}
else{
while(sortCur != nullptr && unSortCur->val > sortCur->val)
{
sortCur = sortCur->next;
sortPre = sortPre->next;
}
if(sortCur == nullptr){
sortPre->next = unSortCur;
unSortCur->next = nullptr;
}
else{
sortPre->next = unSortCur;
unSortCur->next = sortCur;
}
}
unSortCur = unSortNext;
}
return head;
}
};
最新文章
- 一张“神图”看懂单机/集群/热备/磁盘阵列(RAID)
- 10.Struts2连接数据库
- Ubuntu下忘记MySQL密码重设方法
- Memcache使用
- poj 2115 Looooops
- nginx配置入门
- 将Asp.Net页面输出到EXCEL里去
- SVN管理工具Cornerstone之:创建分支、提交合并
- Day1_算法分析方法
- Effective C++(13) 用对象管理资源
- 创建Win32图形界面应用程序
- OSX MacVim + vim-lldb配置和使用心得
- Java常用类(三)之StringBuffer与StringBuidler
- PAT1124:Raffle for Weibo Followers
- [TopCoder]棍子
- node使用ftp模块获取文件夹信息,中文乱码问题
- Django-rest-framework 接口实现 限制:(Throttle)
- MySQL STR_TO_DATE函数
- MySQL长度、大小写验证问题[开发篇]
- IdentityServer4:IdentityServer4+API+Client实践OAuth2.0客户端模式(1)
热门文章
- oracle数据库自动生成数据库表结构文档(亲测有效)
- ramdisk配置、解压、创建rootfs、启动简单分析
- 如何查找jdk安装路径也就是JAVA_HOME配置的环境变量
- 机器学习--支持向量机 (SVM)算法的原理及优缺点
- 机器学习--PCA算法代码实现(基于Sklearn的PCA代码实现)
- A1071 Speech Patterns (25 分)
- Ubuntu 修改默认编辑器
- golang数据结构之树的三种遍历方式
- Web自动化测试Selenium 学习笔记(一)
- git 添加add readme.txt 报fatal: pathspec &#39;readme.txt&#39; did not match any files错误