leetcode-链表排序

百般思念 提交于 2019-12-03 21:14:45

问题描述:

  排序链表
 
 

在 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)
}

  如果是链表的话,思路不变,做一些处理,先去吃个东西。稍后更新


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!