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