[排序][链表]Leetcode147 对链表进行插入排序
2024-08-25 21:26:39
思路:
插入算法的思想很简单,此题比较为链表数据类型,方便的是不用一个一个的向后移动元素,但是找到应该插入的位置相对麻烦,因为链表只有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;
}
};
最新文章
- NuGet多个项目依赖的公共组件如何打包
- Android 基于Message的进程间通信 Messenger完全解析
- JavaWEB前端向服务器端发送对象
- 使用WCF服务的客户端出现maxReceivedMessageSize异常
- Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App&#39;s Memory
- mydumper原理2
- jQuery--对话框插件--dialog
- [小结][N种方法]实现WPF不规则窗体
- BZOJ1095(动态点分治+堆)
- FIDDLER的使用方法及技巧总结
- Asp.Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty
- linux iptables 防火墙简介
- GlusterFS六大卷模式說明
- 002-redis-数据类型
- Nhibernate入门与demo
- macOS --- 配置基于域名的虚拟主机
- ETL第二篇 调用webservice
- Oracle 体系结构四 逻辑和物理存储结构之间的关系
- Python_selenium之处理Alert窗
- Javaweb的get请求乱码解决