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

排序链表,

题目

力扣链接

水平有限,归并排序非递归的方法没弄出来,┭┮﹏┭┮

代码

package com.harrison.class200;

/*
* @author:Harrison
* @Times:2022年9月1日 下午12:51:18
* @motto:众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
*/
public class Code148_SortList {
	// 归并排序递归版本,时间复杂度O(N*logN),空间复杂度O(logN)
	// 因为递归需要用到系统栈
	public static ListNode sortList1(ListNode head) {
		// 如果链表为空或只有一个结点,不用排序,直接返回
		if (head == null || head.next == null) {
			return head;
		}
		// 利用快慢指针找到链表的中点
		ListNode slow = head;
		ListNode fast = head.next;
		while (fast.next != null && fast.next.next != null) {
			slow = slow.next;
			fast = fast.next.next;
		}
		// 结束上面的while循环后,slow来到了链表的中点(奇数个)
		// 如果链表为偶数个,slow来到链表的上中点
		ListNode start = slow.next;// 链表截断后,start为第二段链表的头结点
		slow.next = null;
		ListNode left = sortList1(head);
		ListNode right = sortList1(start);
		// 用来找到合并之后新的头结点
		ListNode h = new ListNode(0);
		// 因为h会不断移动,所以新建一个引用pre记住h
		ListNode pre = h;
		// 合并两个有序链表(力扣第21题)
		while (left != null && right != null) {
			if (left.val <= right.val) {
				h.next = left;
				left = left.next;
			} else {
				h.next = right;
				right = right.next;
			}
			h = h.next;
		}
		h.next = left != null ? left : right;
		return pre.next;
	}
}

相关文章:

  • ESP32-arduino,超好玩的定时器!
  • Python selenium 页面滚动
  • 【FPGA教程案例69】硬件开发板调试9——通过ila在线调试DDS,并通过HDMI接口在显示器上显示正弦波形
  • MeterSphere专题之: 配套的浏览器插件:chrome-extensions
  • 【FPGA教程案例70】硬件开发板调试10——vivado程序固化详细操作步骤
  • 计算机毕业设计ssm青年志愿者社团管理36uiu系统+程序+源码+lw+远程部署
  • 数据结构————树
  • 【操作系统】 第二章 —— 系统调用 中断 异常
  • 移动端测试
  • Cmake、Qt与VS编译VTK(生成QVTK)
  • Java——JDBC(Java DataBase Connectivity)数据库连接技术
  • Express
  • java学习之springcloud之服务调用+服务降级+服务网关篇
  • 常见的设计模式
  • 【我不熟悉的javascript】02. 使用token和refreshToken的管理用户登录状态
  • 收藏网友的 源程序下载网
  • 自己简单写的 事件订阅机制
  • 【Linux系统编程】快速查找errno错误码信息
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • angular组件开发
  • co模块的前端实现
  • CSS实用技巧干货
  • dva中组件的懒加载
  • golang中接口赋值与方法集
  • JavaScript的使用你知道几种?(上)
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Python语法速览与机器学习开发环境搭建
  • Redis字符串类型内部编码剖析
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 规范化安全开发 KOA 手脚架
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 巧用 TypeScript (一)
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 一个SAP顾问在美国的这些年
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • Android开发者必备:推荐一款助力开发的开源APP
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • #LLM入门|Prompt#3.3_存储_Memory
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (八)Flask之app.route装饰器函数的参数
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (十二)springboot实战——SSE服务推送事件案例实现
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net core控制台应用程序初识
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET框架
  • //解决validator验证插件多个name相同只验证第一的问题
  • @SentinelResource详解
  • [ C++ ] STL---string类的模拟实现
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标