1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package main
- /**
- * 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
- }
- // !!Must split []int{1, 2} into 1 & 2
- slow, fast := head, head.Next // So, fast = head.Next
- for fast != nil && fast.Next != nil {
- slow = slow.Next
- fast = fast.Next.Next
- }
- left := head
- right := slow.Next
- slow.Next = nil // Unlink in the middle
- left = sortList(left)
- right = sortList(right)
- return mergeList(left, right)
- }
- func mergeList(l1, l2 *ListNode) *ListNode {
- dummy := &ListNode{}
- prev := dummy
- for l1 != nil && l2 != nil {
- if l1.Val < l2.Val {
- prev.Next = l1
- l1 = l1.Next
- } else {
- prev.Next = l2
- l2 = l2.Next
- }
- prev = prev.Next
- }
- if l1 != nil {
- prev.Next = l1
- } else {
- prev.Next = l2
- }
- return dummy.Next
- }
- // func main() {
- // l1 := toLinkedList([]int{
- // 2, 7, 4, 2, 8, 54, 3, 2})
- // printList(sortList(l1))
- // }
|