LeetCode148排序链表-----归并排序

题目表述

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

归并排序

归并排序本质,递归加合并两个有序链表。

  • 利用快慢指针,找到链表中点,以中点为边界,将链表拆分成为两个子链表。

  • 对两个子链表分别进行排序。

  • 将两个排序后的子链表合并,得到完整的排序后的链表。可以使用 合并两个有序链表的做法,将两个有序的子链表进行合并。

/** * Definition for singly-linked list. * 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; } * } */ class Solution { public ListNode sortList(ListNode head) { if(head == null){ return null; } if(head.next == null){ return head; } ListNode dummy = new ListNode(-1,head); ListNode slow = new ListNode(-1,head); ListNode fast = head; while(fast != null && fast.next != null){ fast = fast.next.next; slow = slow.next; } ListNode tmp = slow.next; slow.next = null; ListNode left = sortList(head); ListNode right = sortList(tmp); ListNode tmphead = new ListNode(0); ListNode path = tmphead; while(left != null && right != null){ if(left.val < right.val){ path.next = left; left = left.next; }else{ path.next = right; right = right.next; } path = path.next; } path.next = left == null? right:left; return tmphead.next; } }

__EOF__

本文作者Younger
本文链接https://www.cnblogs.com/youngerwb/p/16156832.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   YoungerWb  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示