题目见链接:148.排序链表
思路
傻瓜爱用笨方法,本着能少动脑子和少写代码的原则,使用Go的标准库,实现链表数组的排序以及重新链接。
解题过程
利用Go标准库函数slices.SortFunc和cmp.Compare快速解决问题。
复杂度
- 时间复杂度:O(nlogn)
- 空间复杂度:O(n)
代码实现
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func sortList(head *ListNode) *ListNode {
nodeSlice := make([]*ListNode, 0, 50000)
if head == nil {
return head
}
for head != nil {
nodeSlice = append(nodeSlice, head)
head = head.Next
}
slices.SortFunc(nodeSlice, func(a, b *ListNode) int {
return cmp.Compare(a.Val, b.Val)
})
for i := 0; i < len(nodeSlice) - 1; i++ {
nodeSlice[i].Next = nodeSlice[i+1]
}
nodeSlice[len(nodeSlice)-1].Next = nil
return nodeSlice[0]
}