leetcode刷题笔记(Golang)--148. Sort List

148. Sort List

Sort a linked list in O(n log n) time using constant space complexity.

Example 1:

Input: 4->2->1->3
Output: 1->2->3->4
Example 2:

Input: -1->5->3->4->0
Output: -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
}

你可能感兴趣的:(golang,leetcode)