| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | 
							- package main
 
- // // ListNode ...
 
- // type ListNode struct {
 
- // 	Val  int
 
- // 	Next *ListNode
 
- // }
 
- func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
 
- 	// special cases: [] []; [0] []; [] [0]
 
- 	if l1 == nil && l2 == nil {
 
- 		return nil
 
- 	}
 
- 	if l1 == nil && l2 != nil {
 
- 		return l2
 
- 	}
 
- 	if l1 != nil && l2 == nil {
 
- 		return l1
 
- 	}
 
- 	var curr *ListNode
 
- 	// decide which one is head
 
- 	if l1.Val < l2.Val {
 
- 		curr = l1
 
- 		l1 = l1.Next
 
- 	} else {
 
- 		curr = l2
 
- 		l2 = l2.Next
 
- 	}
 
- 	head := curr
 
- 	// merge 2 list until one of them is []
 
- 	for l1 != nil && l2 != nil {
 
- 		if l1.Val < l2.Val {
 
- 			curr.Next = l1
 
- 			curr = l1
 
- 			l1 = l1.Next
 
- 		} else {
 
- 			curr.Next = l2
 
- 			curr = l2
 
- 			l2 = l2.Next
 
- 		}
 
- 	}
 
- 	// add tail
 
- 	if l1 != nil {
 
- 		curr.Next = l1
 
- 	} else {
 
- 		curr.Next = l2
 
- 	}
 
- 	return head
 
- }
 
 
  |