问题描述:
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3 输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0 输出: -1->0->3->4->5
此问题思路使用归并排序,先贴上归并排序go语言解法:
func merge(arrl []int,arrr []int) []int { fmt.Println("merge arr",arrl,arrr) i,j := 0,0 tmp := make([]int,0) for i<len(arrl) && j<len(arrr){ if (arrl[i]>arrr[j]){ tmp = append(tmp,arrr[j]) j++ }else{ tmp = append(tmp,arrl[i]) i++ } } tmp = append(tmp,arrl[i:]...) tmp = append(tmp,arrr[j:]...) return tmp } func MergeSort(arr []int) []int{ l := len(arr) if (l<2){ return arr } key := l/2 fmt.Println("before left") left := MergeSort(arr[0:key]) fmt.Println("after left",left) right := MergeSort(arr[key:]) fmt.Println("after right",right) return merge(left,right) }
如果是链表的话,思路不变,做一些处理,先去吃个东西。稍后更新
原文:https://www.cnblogs.com/StrongWang/p/10668423.html