题目描述
难度:Middle
相关话题:排序
、链表
在O (n logn ) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
思路:
这里使用了归并排序
,分为分割和合并两个部分。
/**
* @ Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var sortList = function(head) {
return divid(head)
function divid(node){
if(!node || !node.next)return node
let fast=node,slow=node,prev
while(fast && fast.next){
prev=slow
slow=slow.next
fast=fast.next.next
}
prev.next=null
return merge(divid(node),divid(slow))
}
function merge(l1,l2){
if(!l1)return l2
else if(!l2)return l1
else if(l1.val<l2.val){
l1.next=merge(l1.next,l2)
return l1
}else{
l2.next=merge(l1,l2.next)
return l2
}
}
};
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程
本文著作权归作者所有,如若转载,请注明出处
转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com