21.go 779 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package main
  2. // // ListNode ...
  3. // type ListNode struct {
  4. // Val int
  5. // Next *ListNode
  6. // }
  7. func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
  8. // special cases: [] []; [0] []; [] [0]
  9. if l1 == nil && l2 == nil {
  10. return nil
  11. }
  12. if l1 == nil && l2 != nil {
  13. return l2
  14. }
  15. if l1 != nil && l2 == nil {
  16. return l1
  17. }
  18. var curr *ListNode
  19. // decide which one is head
  20. if l1.Val < l2.Val {
  21. curr = l1
  22. l1 = l1.Next
  23. } else {
  24. curr = l2
  25. l2 = l2.Next
  26. }
  27. head := curr
  28. // merge 2 list until one of them is []
  29. for l1 != nil && l2 != nil {
  30. if l1.Val < l2.Val {
  31. curr.Next = l1
  32. curr = l1
  33. l1 = l1.Next
  34. } else {
  35. curr.Next = l2
  36. curr = l2
  37. l2 = l2.Next
  38. }
  39. }
  40. // add tail
  41. if l1 != nil {
  42. curr.Next = l1
  43. } else {
  44. curr.Next = l2
  45. }
  46. return head
  47. }