当前位置:网站首页>Leetcode刷题——对链表进行插入排序
Leetcode刷题——对链表进行插入排序
2022-08-05 05:17:00 【游辞】

题解:(想说的都在注释里)
struct ListNode* insertionSortList(struct ListNode* head){
if(head==NULL || head->next == NULL)
{
return head;//如果为空或者只有一个节点,则不需要排序
}
// 1、初始条件
struct ListNode* sortHead = head;//设置一个节点记录第一个节点
struct ListNode* cur = head->next;//设置一个cur连接原原头结点的下一节点
sortHead->next = NULL;//将第一第二个节点断开,成为两部分
while(cur) // 2、终止条件
{
//3、迭代条件
struct ListNode* next = cur->next;
//将cur节点插入前面的有序区间
struct ListNode* p = NULL, *c = sortHead;//用p记录前一节点,c记录当前位置
while(c)
{
if(cur->val < c->val) //插入值小于当前节点值,则开始插入
{
break; //将插入节点为最大值节点(用尾插)与正常情况结合处理
}
else //如果比较大于,则移动前后指针
{
p = c;
c = c->next;
}
}
//可获得三种节点地址
//1、NULL说明 插入节点值最小(用头插)
//2、节点c非空 说明插入值在链表中间
//3、节点c为空 说明插入节点值最大(用尾插)
if(p == NULL)//如果前驱节点为空,则用头插
{
cur->next = c;
sortHead = cur;
}
else //二三情况结合处理
{
p->next = cur;
cur->next = c;
}
//迭代cur当前节点
cur = next;
}
return sortHead;
}
边栏推荐
猜你喜欢

CVPR最佳论文得主清华黄高团队提出首篇动态网络综述

CVPR 2022 |节省70%的显存,训练速度提高2倍

函数在开发环境中的应用(简易实例)

The University of Göttingen proposed CLIPSeg, a model that can perform three segmentation tasks at the same time

Redis集群(docker版)——从原理到实战超详细

物联网:LoRa无线通信技术

哥廷根大学提出CLIPSeg,能同时作三个分割任务的模型

CAN、CAN FD

LeetCode刷题之第55题

6k+ star,面向小白的深度学习代码库!一行代码实现所有Attention机制!
随机推荐
leetCode刷题之第31题
【shell编程】第三章:函数
【ts】typescript高阶:typeof使用
六、请求处理—获取请求参数系列注解是怎样工作的?
Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
C语言查看大小端(纯代码)
将一句话的单词进行倒置(C语言纯代码)
Redis设计与实现(第三部分):多机数据库的实现
C语言程序死循环问题解析——变量被修改
用GAN的方法来进行图片匹配!休斯顿大学提出用于文本图像匹配的对抗表示学习,消除模态差异!
(C语言)计算结构体大小——结构体内存对齐
1008 数组元素循环右移问题 (20 分)
电子产品量产工具(5)- 页面系统实现
全尺度表示的上下文非局部对齐
framebuffer应用编程及文字显示(2)
《基于机器视觉测量系统的工业在线检测研究》论文笔记
HuiFer 带你读懂 BeanFactory getBean 方法
原型版本管理
网络信息安全运营方法论 (下)
CAN、CAN FD