题目
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
链接
答案
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func sortList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
slow, fast := head, head
for fast.Next != nil && fast.Next.Next != nil {
slow = slow.Next
fast = fast.Next.Next
}
l2 := slow.Next
slow.Next = nil
sortedHead := sortList(head)
sortedL2 := sortList(l2)
return megerList(sortedHead, sortedL2)
}
func megerList(list1, list2 *ListNode) *ListNode {
result := &ListNode{}
tmp := result
for list1 != nil && list2 != nil {
if list1.Val > list2.Val {
tmp.Next = list2
list2 = list2.Next
} else if list1.Val < list2.Val {
tmp.Next = list1
list1 = list1.Next
} else {
tmp.Next = list1
list1 = list1.Next
tmp = tmp.Next
tmp.Next = list2
list2 = list2.Next
}
tmp = tmp.Next
}
if list1 != nil {
tmp.Next = list1
}
if list2 != nil {
tmp.Next = list2
}
return result.Next
}