| 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))
 
- // }
 
 
  |