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

148. 排序链表

https://leetcode.cn/problems/sort-list/description/?envType=study-plan-v2&envId=top-interview-150

一道经典的考察归并排序的题目,采用分治的思想,先拆分成单一的有序部分,再合并这些有序部分成更大的有序部分,对归并排序不了解的可以看看这篇博客:排序算法——归并排序-CSDN博客

class Solution {public class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) { this.val = val; }ListNode(int val, ListNode next) { this.val = val; this.next = next; }}public ListNode sortList(ListNode head) {return divide(head);}public ListNode divide(ListNode node) {if(node == null || node.next == null) {return node;}// 快慢指针找中点ListNode slow = node, fast = node;ListNode pre = null;while(slow != null && fast != null && fast.next != null) {// 快慢指针找到中间节点pre = slow;slow = slow.next;fast = fast.next.next;}pre.next = null;// 将链表一分为二return merge(divide(node), divide(slow));}public ListNode merge(ListNode l1, ListNode l2) {ListNode dummy = new ListNode(-1); // 虚拟头节点ListNode curr = dummy;// 当前尾节点while (l1 != null && l2 != null) {if (l1.val < l2.val) {curr.next = l1;l1 = l1.next;} else {curr.next = l2;l2 = l2.next;}curr = curr.next;}//拼接后续链表curr.next = (l1 != null) ? l1 : l2;return dummy.next;}public static void main(String[] args) {Solution solution = new Solution();System.out.println(solution.sortList(solution.new ListNode(4, solution.new ListNode(2, solution.new ListNode(1, solution.new ListNode(3))))));}
}

相关文章:

  • 大般涅槃经卷第三十五
  • 基于 ColBERT 框架的后交互 (late interaction) 模型速递:Reason-ModernColBERT
  • 车载中央域控制器测试【BCM模块介绍-外灯3】
  • [爬虫实战] 爬微博图片:xpath的具体运用
  • 类和对象(1)
  • Sqlserver-数据库的事务日志已满,原因为“LOG_BACKUP”。
  • C#核心概念解析:析构函数、readonly与this关键字
  • python模块管理环境变量
  • 无损图片压缩 本地处理 批量处理提升效率 无需联网+无广告
  • 位图——求两数之和
  • 力扣热题——查找包含给定字符的单词
  • 上海内推 | 上海算法创新研究院-上海交大联合招收空间智能/具身智能算法实习生
  • springboot中redis的事务的研究
  • 动态规划dp
  • 力扣刷题DAY16(二叉树+迭代遍历)
  • NHANES指标推荐:PHDI
  • 数据库blog6_商业数据库下载知识
  • Day 34
  • 【强化学习】#7 基于表格型方法的规划和学习
  • 续位值运算---左移、右移
  • 至高建设集团 网站/网站seo快速优化
  • 一个网站需要几个人/百度站长平台账号购买
  • 天津建设工程评标专家网站/今天新闻头条新闻
  • 上海企业模板建站/考研培训
  • 网站建设好处zu97/搜索seo神器
  • 电子商务官方网站建设/b站推广