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

leetcode每日一题49

  1. 对链表进行插入排序
    从前向后插入排序
    维护头节点到当前节点的前一个节点为有序链表,然后把当前节点与从头节点到当前节点的前一个节点的所有节点进行比较,知道第一个大于当前节点的位置,则为当前节点的插入位置。
    为了方便在头节点前插入,需要增加一个指向头节点的哑节点
/*** 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==nullptr)return head;ListNode *dummy = new ListNode(0);dummy->next = head;ListNode *tail = head;ListNode *cur = head->next;while(cur!=nullptr){if(tail->val <= cur->val){tail = tail->next;}else{ListNode * pre = dummy;while(pre->next->val <= cur->val)pre = pre->next;tail->next = cur->next;cur->next = pre->next;pre->next = cur;}cur = tail->next;}return dummy->next;}
};
  1. 排序链表
    进阶要求里要求时间复杂度为O(nlogn),主要有快排、归并排序、堆排序
    归并排序比较适合链表
    找到链表的中点,分别对链表左右两边进行排序,然后递归,将链表的左半边,右半边分别看作一个需要排序的链表,找中点,直到拆成分散的点,然后两两合并。递归这里就是起一个保存所有点的位置的作用。
    找中点可以使用快慢指针
在这里插入代码片/*** 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* sortList(ListNode* head) {return sort1(head, nullptr);}ListNode* sort1(ListNode* head, ListNode* tail) {if(head == nullptr)return head;if(head->next == tail){head->next = nullptr;return head;}ListNode* slow = head;ListNode* fast = head;while(fast!=tail){slow = slow->next;fast = fast->next;if(fast!=tail){fast = fast->next;}}ListNode* mid = slow;return merge(sort1(head,mid),sort1(mid,tail));}ListNode* merge(ListNode* head1, ListNode* head2){ListNode* dummy = new ListNode(0);ListNode* temp = dummy;ListNode* temp1 = head1;ListNode* temp2 = head2;while(temp1!=nullptr&&temp2!=nullptr){if(temp1->val<=temp2->val){temp->next = temp1;temp1 = temp1->next;}else {temp->next = temp2;temp2 = temp2->next;}temp=temp->next;}if(temp1!=nullptr)temp->next=temp1;else temp->next=temp2;return dummy->next;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微信小程序的四种弹窗使用
  • 【计算机操作系统】段页式管理方式
  • 【网络安全】IDOR之邮箱银行报价
  • 全面讲解Vue中的toRaw函数
  • Go第一个程序
  • 高性能web服务器2——Nginx概述
  • STM32 —— TIM(基本定时器)详解_stm32的tim
  • 实验十 编写子程序《汇编语言》- 王爽
  • 设计者模式:深度解析及应用
  • DC-DC 转换器中的压电谐振器:当前状态和限制
  • Ps:首选项 - 性能
  • RabbitMQ集群 - 普通集群搭建、宕机情况
  • 控制阶段在DMAIC中的主要目标是什么?
  • python 速成指南
  • vba发邮件的几种方法:新人如何快速上手?
  • gulp 教程
  • Vue学习第二天
  • webpack+react项目初体验——记录我的webpack环境配置
  • 番外篇1:在Windows环境下安装JDK
  • 翻译:Hystrix - How To Use
  • 高度不固定时垂直居中
  • 缓存与缓冲
  • 记一次删除Git记录中的大文件的过程
  • 经典排序算法及其 Java 实现
  • 免费小说阅读小程序
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 听说你叫Java(二)–Servlet请求
  • 微信小程序:实现悬浮返回和分享按钮
  • $.ajax()参数及用法
  • (3)选择元素——(17)练习(Exercises)
  • (7)STL算法之交换赋值
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (poj1.3.2)1791(构造法模拟)
  • (函数)颠倒字符串顺序(C语言)
  • (力扣)1314.矩阵区域和
  • (三)mysql_MYSQL(三)
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四)模仿学习-完成后台管理页面查询
  • (四)事件系统
  • (算法)大数的进制转换
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core 依赖注入的基本用发
  • .NET Core跨平台微服务学习资源
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net分布式压力测试工具(Beetle.DT)
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [20170713] 无法访问SQL Server
  • [AIGC] Java 和 Kotlin 的区别
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [bzoj1912]异象石(set)
  • [Contest20180313]灵大会议