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;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147811.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】入门学习1:开发前的准备

准备工作&#xff1a; 1、电脑系统&#xff1a;windows 64位&#xff1b; 2、python学习所需工具&#xff1a;“解释器、编译器”&#xff1b; &#xff08;1&#xff09;python 解释器&#xff1a;解释代码的&#xff0c;把 python 计算机语言翻译给计算机认识&#xff1b;…

双通道隔离驱动之选,SLMi823x系列SLMi8235BDCG-DG可编程死区满足您需求

SLMi823x系列SLMi8235BDCG-DG双通道死区可编程的隔离驱动器。SLMi823x系列SLMi8235BDCG-DG配置为双输入&#xff0c;双输出驱动器。另外&#xff0c;SLMi823x系列SLMi8235BDCG-DG峰值输出电流为 4.0A。 所有输出驱动器的 VDDA/B 电源电压最高到40V。3V 至 18V 的 VDDI 宽范围输…

git用ssh来拉去代码

参考资料 5分钟 git配置ssh_哔哩哔哩_bilibili Git怎么使用SSH从GitLab上拉取代码_gitlab ssh-CSDN博客 gitlab怎么配置通过ssh来拉取代码_gitlab ssh 拉代码-CSDN博客 执行的命令:(需要在你本地.ssh文件夹下执行) ssh-keygen -t rsa -b 4096 -C "你的邮箱" ss…

PHPstorm 安装汉化包失败解决方法

错误信息&#xff1a; Plugin "chinese (Simplified) Language Pack/中文语言包" was not installed: invalid filename returned by a server 原因 &#xff1a;官方的包和软件的版本不对应&#xff0c;下载对应的汉化包就行了 官网汉化包&#xff1a; Chinese (…

Linux C——网络编程

本案例运行环境&#xff1a;Ubuntu 12.04.1 LTS 1、基本概念 网络的七层模型&#xff1a; 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 其中&#xff1a;1、2、3层主要面向通过网络端到端的数据流&#xff0c; 4、5、6、7层定义了程序的功能 …

抱歉占用公共资源,大家别猜啦,我们在一起了@Yaker

家人们上午好呀 这里是超绝脱单牛一枚 没错&#xff0c;我和Yaker有一个孩子&#xff08;bushi 今天我们的孩子YakLang来给大家介绍介绍&#xff0c;ta对块作用域的处理方式 在编程中&#xff0c;作用域&#xff08;Scope&#xff09;指的是变量、函数和对象的可访问性和生命…

Java反序列化CC1-TransformedMap链学习

学习参考&#xff1a;Java反序列化CC1链TransformedMap 核心是要学会基本EXP编写&#xff0c;还有怎么找传递链。 链子尾部 这里有一个能反射调用任意类&#xff0c;任意方法的&#xff1a; 以这个漏洞点写EXP&#xff0c;由于这个是public的InvokerTransformer&#xff0c;所…

如何基于scrcpy改造实现大厂一键连招/触摸宏功能(带java源码)-千里马安卓framework实战

背景&#xff1a; 前面公众号文章已经分享过如何实现这种大厂里面一键连招&#xff0c;触摸宏的功能&#xff0c;原理本身是对dev/input下面的节点进行读取保存文件&#xff0c;然后在读取文件进行写入dev/input下面的节点&#xff0c;从而实现了触摸事件的读取和写入&#xf…

初始main方法,标识符和关键字

1. 初识Java的main方法 1.1 main方法示例 public class HelloWorld{public static void main(String[] args){System.out.println("Hello,world");} }图解&#xff1a; 通过上述代码&#xff0c;我们可以看到一个完整的Java程序的结构&#xff0c;Java程序的结构…

C. Lazy Narek (Codeforces Round 972 (Div. 2))

C. Lazy Narek 思路: 动态规划 dp dp[i] 表示 目前寻找的字符下标为i 时的最大分数&#xff08;<i<4&#xff09; 从前往后遍历字符串&#xff0c;每个字符串找5次&#xff0c;找完后把dp取max 注意找的过程中不能修改原dp数组&#xff0c;因为这5次查找是并行的&#x…

STM32引脚输入

文章目录 前言一、看原理图二、开始编程1.开启时钟2.配置GPIOA.0 上拉输入3.读取 GPIOA.0 引脚 GPIOA_IDR 0位上是1&#xff08;按键松开&#xff09;&#xff0c;输入就是高电平&#xff0c;否则就是低电平&#xff08;按键按下&#xff09; 三、完整程序四 测试效果总结 前言…

故障诊断 | 基于双路神经网络的滚动轴承故障诊断

故障诊断 | 基于双路神经网络的滚动轴承故障诊断 目录 故障诊断 | 基于双路神经网络的滚动轴承故障诊断效果一览基本介绍程序设计参考资料效果一览 基本介绍 基于双路神经网络的滚动轴承故障诊断 融合了原始振动信号 和 二维信号时频图像的多输入(多通道)故障诊断方法 单路和双…

快速生成应用:AI大模型与低代码平台如何无缝结合提升效率?

引言&#xff1a;数字化时代的开发挑战 在数字化转型的浪潮中&#xff0c;快速响应市场需求已成为企业的核心竞争力。AI大模型与低代码平台的结合&#xff0c;为应用开发提供了一条更加智能、快速的路径。通过自动代码生成、智能推荐和持续优化&#xff0c;这一无缝结合大幅提升…

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-19

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-19 1. SAM4MLLM: Enhance Multi-Modal Large Language Model for Referring Expression Segmentation Authors: Yi-Chia Chen, Wei-Hua Li, Cheng Sun, Yu-Chiang Frank Wang, Chu-Song Chen SAM4MLLM: 增强多模…

21 基于51单片机的隧道车辆检测系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 以AT89C51单片机为控制核心&#xff0c;实现对隧道环境的监测。采用模块化设计&#xff0c; 共分以下几个功能模块&#xff1a; 单片机最小系统模块、电源模块、气体传感模块、和显示模块等。 通过…

在电脑中增加一个新盘

找到此电脑右击找到管理点进去 找到磁盘管理点进去 找到D盘&#xff0c;点击D盘然后右击找到压缩卷点击&#xff0c;之后按照自己的意愿分盘容量 然后就一直点下一页 返回去就能看到新加卷F盘了 在此电脑中也可以查看 完成

ToB项目身份认证(一):基于目录的用户管理、LDAP和Active Directory简述

在ToB的项目里&#xff0c;公司部门之间是树状的关系&#xff0c;成员结构也类似。由于windows的使用范围很广&#xff0c;尤其是在企业里&#xff0c;所以它集成的Active Directory域服务往往企业应用需要兼容的。 什么是基于目录的用户管理&#xff1f; 基于目录的用户管理…

双十一快来了!什么值得买?分享五款高品质好物~

双十一大促再次拉开帷幕&#xff0c;面对众多优惠是否感到选择困难&#xff1f;为此&#xff0c;我们精心筛选了一系列适合数字生活的好物&#xff0c;旨在帮助每一位朋友都能轻松找到心仪之选。这份推荐清单&#xff0c;不仅实用而且性价比高&#xff0c;是您双十一购物的不二…

cc2530使用(SmartRF Flash Programmer)烧录hex固件

1图标 2IAR生成HEX文件 2-1勾选他 2-2生成对应的文件&#xff08;勾选他并改后缀&#xff09; &#xff08;选择他&#xff09; 点击OK即可 3&#xff08;选择文件&#xff0c;插入板子&#xff08;会显示对应的板子&#xff09;&#xff0c;烧录即可&#xff09;

LeetcodeTop100 刷题总结(二)

LeetCode 热题 100&#xff1a;https://leetcode.cn/studyplan/top-100-liked/ 文章目录 八、二叉树94. 二叉树的中序遍历&#xff08;递归与非递归&#xff09;补充&#xff1a;144. 二叉树的前序遍历&#xff08;递归与非递归&#xff09;补充&#xff1a;145. 二叉树的后序遍…