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

2024/9/23 leetcode 148题 排序链表

目录

148.排序链表

题目描述

题目链接

解题思路与代码


==============================================================

148.排序链表

题目描述

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。

示例 1:

5a262a003ce8463fb46d83b1961191ee.png

输入:head = [4,2,1,3]
输出:[1,2,3,4]

示例 2:

3f1ea17d034bcde2cc9644b7f4e6223c.jpeg

输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]

示例 3:

输入:head = []
输出:[]

题目链接

148.排序链表

解题思路与代码

本题目思路是使用归并排序,不过是链表的实现方法。我们来通过图详解递归思路

1a5221202aa340b9b38ec77e2d326d20.png

slow和fast作用就是分割链表,如下图。

1ec45df08d254a40a6ba1dee42602be5.png

然后我们让tem = slow->next

slow ->next = NULL。

分割成如下。

0d02a6fc129f476182fa53a320683560.png

递归传递head和tem ,然后递归终止条件就是 :

传递的值是NULL或者只有一个结点。

排序逻辑就是新建一个虚拟头结点,将传递的这些结点进行正常排序比较。如图:

6d680f7c92454891970932984b682f01.png

最后head1 ->next返回,head2 ->next也返回。

这返回的两个链表继续比较。

4a1933a5f47745c1ba861a7b8634304b.png

最后返回nhead->next就是最终结果。

其实就是归并排序,只不过链表实现而已。

(c++代码)

/*** 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) {if(head == NULL || head ->next == NULL) return head;ListNode* slow = head;ListNode* fast = head ->next;while(fast != NULL && fast ->next != NULL) {slow = slow ->next;fast = fast ->next ->next;}ListNode* tem = slow ->next;slow ->next = NULL;ListNode* left = sortList(head);ListNode* right = sortList(tem);ListNode* nhead = new ListNode();ListNode* res = nhead;while(left != NULL && right != NULL) {if(left ->val < right ->val) {nhead ->next = left;left = left ->next;}else {nhead ->next = right;right = right ->next;}nhead = nhead ->next;}nhead ->next = left != NULL ? left : right;return res ->next;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CentOS修改主机名
  • 内核是如何接收网络包的
  • 变电站缺陷数据集8307张,带xml标注和txt标注,可以直接用于yolo训练
  • 实现HTML两栏布局
  • neo4j关系的创建删除 图的删除
  • @DS 多数据源 + @Transactional(rollbackFor = Exception.class) 导致@DS 多数据源没法使用
  • uniapp打包自动上传小程序后台
  • 【sql】MySQL中去重处理的方法
  • E2VPT: An Effective and Efficient Approach for Visual Prompt Tuning
  • 通义千问模型升级:2.5正式上线的使用体验
  • Go语言笔记
  • 人工智能与机器学习原理精解【24】
  • 解决银河麒麟桌面操作系统V10SP1 SSH连接“connection reset by ip地址 port 22”问题
  • spring 注解 - @NotEmpty - 确保被注解的字段不为空,而且也不是空白(即不是空字符串、不是只包含空格的字符串)
  • 使用 webpack,将 JS 文件中的 css 提取到单独的样式文件中
  • 【391天】每日项目总结系列128(2018.03.03)
  • android 一些 utils
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ES6核心特性
  • gf框架之分页模块(五) - 自定义分页
  • HTML中设置input等文本框为不可操作
  • Java精华积累:初学者都应该搞懂的问题
  • MQ框架的比较
  • Mysql5.6主从复制
  • mysql常用命令汇总
  • PhantomJS 安装
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • React Transition Group -- Transition 组件
  • React中的“虫洞”——Context
  • Spring Boot MyBatis配置多种数据库
  • text-decoration与color属性
  • vue 个人积累(使用工具,组件)
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • XML已死 ?
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 日剧·日综资源集合(建议收藏)
  • 如何解决微信端直接跳WAP端
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用SAX解析XML
  • 通过git安装npm私有模块
  • 延迟脚本的方式
  • 再谈express与koa的对比
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (7)svelte 教程: Props(属性)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (原創) 物件導向與老子思想 (OO)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)重识new