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

经典算法:排序链表

题目:148. 排序链表

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

示例 1:

输入:head = [4,2,1,3]
输出:[1,2,3,4]

示例 2:

输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目在范围 [0, $ 5 * 10^4 $] 内
  • $ -10^5 $ <= Node.val <= $ 10^5 $

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

解题思路

见代码。

实现代码

package leetcodeimport ("sort""github.com/superproj/go-leetcode/structure"
)// ListNode define
type ListNode = structure.ListNode/*** Definition for singly-linked list.* type ListNode struct {*     Val int*     Next *ListNode* }*/
func sortList(head *ListNode) *ListNode {// 将链表转换成slicenums := make([]int, 0)tmp := headfor tmp != nil {nums = append(nums, tmp.Val)tmp = tmp.Next}// 将slice排序sort.Ints(nums)// 将slice转换成链表dummyHead := new(ListNode)node := dummyHeadfor i := 0; i < len(nums); i++ {tmpNode := &ListNode{nums[i], nil}node.Next = tmpNodenode = tmpNode}return dummyHead.Next
}

单元测试

package leetcodeimport ("testing""github.com/stretchr/testify/assert""github.com/superproj/go-leetcode/structure"
)func Test_sortList(t *testing.T) {assert := assert.New(t)type args struct {first []int}tests := []struct {args argswant []int}{{args: args{[]int{1, 2, 3, 4, 5}},want: []int{1, 2, 3, 4, 5},},{args: args{[]int{1, 1, 2, 5, 5, 4, 10, 0}},want: []int{0, 1, 1, 2, 4, 5, 5, 10},},{args: args{[]int{1}},want: []int{1},},{args: args{[]int{}},want: []int{},},}for _, tt := range tests {first := structure.Ints2List(tt.args.first)actual := structure.List2Ints(sortList(first))assert.Equal(tt.want, actual)}
}

例行海报:10+ 高质量体系课、15+ 实战项目助你提高技术天花板,入大厂、拿高薪

http://www.xdnf.cn/news/12948.html

相关文章:

  • DQN算法(详细注释版)
  • 开源项目实战学习之YOLO11:12.7 ultralytics-models-transformer.py
  • SpringMVC简介
  • 【GPT模型训练】第一课:安装PyTorch环境
  • PandasAI使用
  • Doris-2:单虚拟机上非docker化安装Doris实验环境
  • 万利达电动机保护器接ModbusRTU转profibusDP网关与300PLC通讯
  • 2025-06-02-数据库的分类和应用
  • 大数据(3) 分布式文件系统HDFS
  • LeetCode 2894.分类求和并作差
  • 什么是函数对象
  • 【ArcGIS技巧】—村庄规划规划用地规划状态字段生成工具
  • 并发请求函数batchRequests
  • 类加载的过程
  • 【算法笔记】树套树
  • RSA和AES算法核心区别和原理解析
  • Python地理数学可视化:基于函数生成真实感地形
  • WebFuture 升级提示“不能同时包含聚集KEY和大字段””的处理办法
  • 【Docker 02】Docker 安装
  • 71常用控件_QHBoxLayout的使用
  • 浅谈未来汽车电子电气架构发展趋势中的通信部分
  • 【无人机】MavLink通讯协议的回调解析函数及状态机
  • AtCoder Beginner Contest 409(ABCDEF)
  • 深入解析对比学习:原理、应用与技术实现
  • 前端打包工具简单介绍
  • JavaWeb 三层架构简单介绍与案例实现
  • QEMU源码全解析 —— 块设备虚拟化(24)
  • 【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数
  • Java八股文——并发编程「场景篇」
  • 湖北理元理律师事务所实务手记:个人债务管理的理性突围