博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Leetcode刷题篇】leetcode148 排序链表
阅读量:1886 次
发布时间:2019-04-26

本文共 1275 字,大约阅读时间需要 4 分钟。

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

进阶:

你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?

在这里插入图片描述

归并排序

/** * 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) {
return mergeSort(head,null); } public ListNode mergeSort(ListNode head,ListNode tail){
// 截止条件 if(head==null){
return null; } if(head.next==tail){
head.next = null; return head; } // 找mid // 快慢指针 ListNode slow = head,fast = head; while(fast!=tail&&fast.next!=tail){
slow = slow.next; fast = fast.next.next; } ListNode mid = slow; ListNode left = mergeSort(head,mid); ListNode right = mergeSort(mid,tail); ListNode sorted = merge(left,right); return sorted; } // 合并两个有序链表 public ListNode merge(ListNode head1,ListNode head2){
ListNode dummy = new ListNode(-1); ListNode pre = dummy; while(head1!=null&&head2!=null){
if(head1.val

转载地址:http://rzwdf.baihongyu.com/

你可能感兴趣的文章
对vue 键盘回车事件的实例讲解(收藏)
查看>>
解决每次上线更新文件需要手动清除缓存的问题-------js 、css自动清除浏览器缓存方法
查看>>
关于禁止页面缓存的一些摘录
查看>>
服务器免密配置
查看>>
linux安装jdk
查看>>
redis单点环境搭建
查看>>
zookeeper环境搭建
查看>>
linux中mysql配置安装
查看>>
ElasticSearch集群环境搭建
查看>>
Cassandra CQL v3.3中文文档(一)
查看>>
MongoDB命令之SplitVector实现并发数据迁移
查看>>
Java中String的常用API
查看>>
Yarn功能简介
查看>>
linux下的定时任务
查看>>
通过shell界面访问其他机器mysql数据库的方法
查看>>
使用mysql自带工具mysqldump进行全库备份以及source命令恢复数据库
查看>>
决策树笔记(入门)
查看>>
Taro中如何使用cssModules
查看>>
taro中别名引入路径
查看>>
taro中hook的使用
查看>>