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

【CT】LeetCode手撕—148. 排序链表

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐148. 排序链表——题解思路
  • 3- ACM 实现

题目

  • 原题连接:148. 排序链表

1- 思路

  • 排序链表,将每个元素看做一个单独的链表 ——> 归并排序 ——> 每次将单独的链表合并

2- 实现

⭐148. 排序链表——题解思路

在这里插入图片描述

class Solution {public ListNode sortList(ListNode head) {// 1. 先求链表长度int len = 0;ListNode forH = head;while(forH!=null){len++;forH = forH.next;}ListNode dummyHead = new ListNode(-1);dummyHead.next = head;// 2. 利用 for 拆分for(int subLen = 1 ; subLen < len;subLen*=2){ListNode prev = dummyHead, cur = dummyHead.next;while(cur!=null){// 子链1ListNode head1 = cur;for(int i = 1 ; i < subLen && cur.next !=null ; i++){cur = cur.next;}// 子链2ListNode head2 = cur.next;cur.next = null;cur = head2;for(int i = 1 ; i < subLen && cur!=null && cur.next !=null ;i++){cur = cur.next;}ListNode next = null;if(cur!=null){next = cur.next;cur.next = null;}ListNode merged = mergeList(head1,head2);prev.next = merged;while(prev.next!=null){prev = prev.next;}cur = next;}}return dummyHead.next;}public ListNode mergeList(ListNode head1,ListNode head2){ListNode dummyHead = new ListNode(0);ListNode cur = dummyHead;ListNode forA = head1;ListNode forB = head2;while(forA!=null && forB !=null){if(forA.val < forB.val){cur.next = forA;forA = forA.next;}else{cur.next = forB;forB = forB.next;}cur = cur.next;}if(forA!=null){cur.next = forA;}else{cur.next = forB;}return dummyHead.next;}
}

3- ACM 实现

public class sortLink {static class ListNode{int val;ListNode next;ListNode(){}ListNode(int x){val = x;}}// 合并链表public static ListNode sortList(ListNode head){// 1. 求长度int len = 0;ListNode l = head;while (l!=null){len++;l = l.next;}ListNode dummyHead = new ListNode(-1);dummyHead.next = head;// 自底向上for(int subLen = 1 ; subLen < len;subLen*=2){ListNode prev = dummyHead,cur = dummyHead.next;while(cur!=null){ListNode head1 = cur;for(int i = 1; i < subLen && cur.next!=null; i++){cur = cur.next;}ListNode head2 = cur.next;cur.next = null;cur = head2;for(int i = 1; i < subLen && cur!=null && cur.next!=null ; i++){cur = cur.next;}// 记录nextListNode next = null;if(cur!=null){next = cur.next;cur.next = null;}ListNode merged = merged(head1,head2);prev.next = merged;while(prev.next!=null){prev = prev.next;}cur = next;}}return dummyHead.next;}public static ListNode merged(ListNode head1, ListNode head2){ListNode dummyHead = new ListNode(-1);ListNode cur = dummyHead;while(head1!=null && head2 !=null){if(head1.val<head2.val){cur.next = head1;head1 = head1.next;}else{cur.next = head2;head2 = head2.next;}cur = cur.next;}if(head1!=null){cur.next = head1;}else{cur.next = head2;}return dummyHead.next;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入链长度");int n = sc.nextInt();System.out.println("输入链表元素");ListNode head=null,tail=null;for(int i = 0 ; i < n;i++){ListNode newNode = new ListNode(sc.nextInt());if(head==null){head = newNode;tail = newNode;}else{tail.next = newNode;tail = tail.next;}}ListNode res = sortList(head);System.out.println("排序后的链表是");while(res!=null){System.out.print(res.val +" ");res = res.next;}}
}

相关文章:

  • 2024亚太杯中文赛数学建模B题【洪水灾害的数据分析与预测】思路详解
  • 利用Python破解隔壁家的WiFi密码
  • LabVIEW自动探头外观检测
  • Redis 7.x 系列【17】四种持久化策略
  • 面试知识储备-SpringCloud
  • 《安全大模型技术与市场研究报告》发布,海云安榜上有名
  • 双指针算法:快速排序模拟实现
  • 网络安全的十字路口:向“架构化”转移
  • [IntelliJ IDEA插件]推荐一款简单方便的插件CodeChrono
  • SLAM 精度评估
  • (十三)MipMap
  • 谷歌正在试行人脸识别办公室安全系统
  • mmaction2版本适配(Linux)
  • 比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象?
  • 龙芯杯个人赛记录
  • 4个实用的微服务测试策略
  • Django 博客开发教程 8 - 博客文章详情页
  • HTTP 简介
  • JavaScript 基本功--面试宝典
  • nfs客户端进程变D,延伸linux的lock
  • php的插入排序,通过双层for循环
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 阿里研究院入选中国企业智库系统影响力榜
  • 从0到1:PostCSS 插件开发最佳实践
  • 跨域
  • 前嗅ForeSpider采集配置界面介绍
  • 嵌入式文件系统
  • 如何在GitHub上创建个人博客
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #define,static,const,三种常量的区别
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (C++17) std算法之执行策略 execution
  • (C语言)共用体union的用法举例
  • (pojstep1.3.1)1017(构造法模拟)
  • (八)c52学习之旅-中断实验
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (南京观海微电子)——I3C协议介绍
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (转)为C# Windows服务添加安装程序
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET CLR Hosting 简介
  • .Net MVC4 上传大文件,并保存表单
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET单元测试
  • .NET企业级应用架构设计系列之开场白
  • .net专家(高海东的专栏)
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /etc/shadow字段详解
  • @hook扩展分析