当前位置: 首页 > news >正文

对链表进行插入排序

147. 对链表进行插入排序 - 力扣(LeetCode)

通常的办法:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* insertionSortList(ListNode* head) {ListNode* pre1=nullptr;ListNode* pre2=nullptr;ListNode* cur=head;ListNode* first = head;ListNode* tmp=nullptr;while(cur){if(cur==head){pre1=cur;cur=cur->next;continue;}tmp=first;while(tmp!=cur && tmp->val<= cur->val){pre2=tmp;tmp=tmp->next;}if(tmp->val>cur->val){pre1->next = cur->next;if(pre2)pre2->next=cur;elsefirst=cur;cur->next=tmp;cur=pre1->next;}else{pre1=cur;cur=cur->next;}pre2=nullptr;}return first;}
};

指针非常多,每次需要判断,很麻烦。接下来使用一个虚拟头节点方法,再把队伍分成排列好的和未排列的:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* insertionSortList(ListNode* head) {if (!head || !head->next) return head;ListNode prev(-5001);prev.next=head;ListNode* lastSorted=head;ListNode* cur=head->next;while(cur){if(lastSorted->val<=cur->val){lastSorted=cur;cur=cur->next;}//查找插入位置else{ListNode* pre=&prev;while(pre->next->val <= cur->val)pre=pre->next;lastSorted->next=cur->next;cur->next= pre->next;pre->next = cur;cur=lastSorted->next;}}return prev.next;}
};

需要注意的一个点是:if(lastSorted->val<=cur->val)与while(pre->next->val <= cur->val),一般都要带等于,保持前后相对顺序一致,如果不等于,那么这两部分都要不等于,否则会出现逻辑错误。


文章转载自:

http://uSxVUNcf.ctswj.cn
http://Z0wcx1dM.ctswj.cn
http://9z4Bg0xA.ctswj.cn
http://LEDZuXx3.ctswj.cn
http://ufaWN2Vi.ctswj.cn
http://qvnJ2OBl.ctswj.cn
http://QOPvB3bS.ctswj.cn
http://pzrBBI0g.ctswj.cn
http://hM8qNKgx.ctswj.cn
http://C2QosLRI.ctswj.cn
http://asaqjSIe.ctswj.cn
http://G1KwIZ5W.ctswj.cn
http://qG6ImC3t.ctswj.cn
http://D1EqE1KA.ctswj.cn
http://olAkggyE.ctswj.cn
http://aXaAPiBz.ctswj.cn
http://JXJ2kzYh.ctswj.cn
http://MaTlNlsG.ctswj.cn
http://q6Mq79uk.ctswj.cn
http://8qV00I2i.ctswj.cn
http://M372lQrM.ctswj.cn
http://Jhmd568h.ctswj.cn
http://gJC6aIfr.ctswj.cn
http://wHQmK31Q.ctswj.cn
http://SayeZTuB.ctswj.cn
http://vzHjExBm.ctswj.cn
http://myyFtYwc.ctswj.cn
http://XSMZp7Re.ctswj.cn
http://bSL8C6wW.ctswj.cn
http://T7nCVDho.ctswj.cn
http://www.dtcms.com/a/385336.html

相关文章:

  • 配置文件和动态绑定数据库(中)
  • mysql基础——表的约束
  • pcre-8.44-2.ky10.x86_64.rpm怎么安装?CentOS/Kylin系统RPM包安装详细步骤(附安装包)
  • TDengine 聚合函数 COUNT 用户手册
  • STM32F103C8T6开发板入门学习——点亮LED灯
  • K-means 聚类算法:基于鸢尾花数据集的无监督学习全流程解析
  • JVM新生代/老年代垃圾回收器、内存分配与回收策略
  • 介绍一下 RetNet
  • rt-linux下__slab_alloc里的另外一处可能睡眠的逻辑
  • 如何统计DrawMeshInstancedIndirect绘制物体的Triangle数据
  • Android音视频学习路线图
  • 深入理解C语言指针(一)| 从内存到传址调用,掌握指针的核心本质
  • 代码审计-PHP专题原生开发文件上传删除包含文件操作监控Zend源码解密1day分析
  • springboot与vue中webSocket前后端连接问题
  • 数据结构——顺序存储链式存储
  • Vue 脚手架与webpack
  • pytest单元测试框架
  • CentOS7.9绿色安装mysql5.7.44
  • Cell Biology Learning Track(I)膜结构
  • 医院用的桌面管控软件有哪些?适用于医院的桌面管控软件推荐
  • 异步编程三剑客:回调、闭包与Promise组合实战
  • MySQL 主从同步(复制)实战
  • redis面试点记录
  • mysql和postgresql如何选择
  • 电磁兼容性(EMC)法规
  • 【论文笔记】Self-Supervised Point Cloud Prediction for Autonomous Driving
  • MySQL数据库(四)—— 使用MyCat实现MySQL主从读写分离实战指南
  • HTB paper
  • oracle认证有哪几种?如何选择
  • YoloV8改进策略:上采样改进|反卷积|数学上可逆的反卷积」塞进 YOLOv8,涨点不涨参!图像恢复黑科技 Converse2D 的跨界奇袭!