# 面试题25

输入两个递增排序的链表，合并这两个链表并使新链表中的节点仍然是递增排序的。

```
示例1：

输入：1->2->4, 1->3->4
输出：1->1->2->3->4->4
```

## 限制：

* 0 <= 链表长度 <= 1000

## 注意：本题与主站 21 题相同：<https://leetcode-cn.com/problems/merge-two-sorted-lists/>

## Solutions

1. **iteration**

```cpp
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode dummy, * head = &dummy;
        while (l1 && l2) {
            if (l1->val <= l2->val) {
                head->next = l1; l1 = l1->next;
            }
            else {
                head->next = l2; l2 = l2->next;
            }
            head = head->next;
        }
        head->next = l1 ? l1 : l2;

        return dummy.next;
    }
};
```

1. **recursion**

```cpp
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if (l1 && l2)
            if (l1->val <= l2->val) {
                l1->next = mergeTwoLists(l1->next, l2);
                return l1;
            }
            else {
                l2->next = mergeTwoLists(l1, l2->next);
                return l2;
            }
        else
            return l1 ? l1 : l2;
    }
};
```
