정렬 O의 링크 된리스트는 일정한 공간 복잡도를 이용하여 시간 (N 로그 n).
예 1 :
입력 : 4-> 2-> 1-> 3
출력 : 1-> 2-> 3-> 4
실시 예 2 :
입력 : -1-> 5-> 3-> 4 -> 0
출력 : -1-> 0-> 3-> 4 -> 5
func sortList(head *ListNode) *ListNode {
if head == nil || head.Next== nil {
return head
}
fast, slow := head.Next, head
for fast != nil && fast.Next != nil {
fast = fast.Next.Next
slow = slow.Next
}
fmt.Println("hello")
mid := slow.Next
slow.Next = nil
return merge(sortList(head), sortList(mid))
}
func merge(l1 *ListNode, l2 *ListNode) *ListNode {
dummy := ListNode{Val: 0}
curr := &dummy
for l1 != nil && l2 != nil {
if l1.Val < l2.Val {
curr.Next = l1
l1 = l1.Next
} else {
curr.Next = l2
l2 = l2.Next
}
curr = curr.Next
}
if l1 != nil {
curr.Next = l1
}
if l2 != nil {
curr.Next = l2
}
return dummy.Next
}