剑指 Offer 25. 合并两个排序的链表

  1. //迭代法 哨兵模式,复杂度On,O1
  2. func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
  3. dummy := &ListNode{}
  4. prev := dummy
  5. for l1 != nil && l2 != nil {
  6. if l1.Val <= l2.Val {
  7. prev.Next = l1
  8. l1 = l1.Next
  9. } else {
  10. prev.Next = l2
  11. l2 = l2.Next
  12. }
  13. prev = prev.Next
  14. }
  15. if l1 == nil {
  16. prev.Next = l2
  17. }
  18. if l2 == nil {
  19. prev.Next = l1
  20. }
  21. return dummy.Next
  22. }
//递归法 通法,复杂度On,On
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
    if l1 == nil {
        return l2
    }
    if l2 == nil {
        return l1
    }

    var res *ListNode
    if l1.Val <= l2.Val {
        res = l1
        res.Next = mergeTwoLists(l1.Next, l2)
    } else {
        res = l2
        res.Next = mergeTwoLists(l2.Next, l1)
    }
    return res
}