LeetCode18|排序链表
时间:2022-07-23
本文章向大家介绍LeetCode18|排序链表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1,问题简述
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
2,示例
输入: 4->2->1->3
输出: 1->2->3->4
3,题解思路
本题基于哨兵节点加上集合排序操作
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortListTest {
public static void main(String[] args) {
ListNode l1 = new ListNode(4);
ListNode l2 = new ListNode(2);
ListNode l3 = new ListNode(1);
ListNode l4 = new ListNode(3);
l1.next = l2;
l2.next = l3;
l3.next = l4;
ListNode listNode = sortList(l1);
System.out.println("listNode = " + listNode);
System.out.println("------------------------------");
ListNode l21 = new ListNode(-1);
ListNode l22 = new ListNode(5);
ListNode l23 = new ListNode(3);
ListNode l24 = new ListNode(4);
ListNode l25 = new ListNode(0);
l21.next = l22;
l22.next = l23;
l23.next = l24;
l24.next = l25;
ListNode listNode1 = sortList(l21);
System.out.println("listNode1 = " + listNode1);
}
public static ListNode sortList(ListNode head) {
if (head == null) {
return head;
}
List<Integer> list = new ArrayList<>();
ListNode tempNode = head;
while (tempNode != null) {
list.add(tempNode.val);
tempNode = tempNode.next;
}
Collections.sort(list);
ListNode dummyNode = new ListNode(-1);
ListNode temp = dummyNode;
for (Integer num : list
) {
temp.next = new ListNode(num);
temp = temp.next;
}
return dummyNode.next;
}
}
- Kafka实战:从RDBMS到Hadoop,七步实现实时传输
- Apache NiFi 1.0.0测试版:邮件路由应用新型ListenSMTP
- 为什么我坚持使用 JavaScript 函数声明
- NewSQL数据库大对象块存储原理与应用
- 使用xUnit为.net core程序进行单元测试(下2)
- MongoDB + Spark: 完整的大数据解决方案
- 如何实现自然语言处理的集束搜索解码器
- PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率
- 流动的数据——使用 RxJS 构造复杂单页应用的数据逻辑
- 内存泄漏的检测、解决、防止
- 大数据Hadoop快速入门教程
- 用Rust解决C语言的隐患
- GAN学习指南:从原理入门到制作生成Demo
- 从糖尿病监测看智能医疗发展
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode25|二叉树的镜像
- 生成接口测试报告
- LeetCode24|第一个只出现一次的字符
- LeetCode27|最长公共前缀
- 搭建简易的物联网服务端和客户端-蓝牙控制(十六)
- java基础|CollectionUtils工具的基本使用
- LeetCode36|二叉树的右视图
- LeetCode35|完全二叉树的节点个数
- LeetCode34|数组中的第k个最大元素
- LeetCode33|寻找重复数
- LeetCode32|前k个高频元素
- LeetCode31|打印从1到最大的n位数
- LeetCode30|翻转单词顺序
- LeetCode28|最后一个单词的长度
- VS2015创建UWP报“vstemplate文件引用的向导类”错误