常规方法:采用归并排序的归并方法即可
Leetcode每日一题:21.merge-two-sorted-lists(合并两个有序链表)_递归实现

struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

ListNode *mergeTwoLists(ListNode *l1, ListNode *l2)
{
    if (l1 == NULL)
        return l2;
    if (l2 == NULL)
        return l1;

    ListNode *p = new ListNode(0);
    ListNode *head = p;

    while (l1 != NULL && l2 != NULL)
    {
        if (l1->val > l2->val)
        {
            ListNode *temp = new ListNode(l2->val);
            p->next = temp;
            p = temp;
            l2 = l2->next;
        }
        else
        {
            ListNode *temp = new ListNode(l1->val);
            p->next = temp;
            p = temp;
            l1 = l1->next;
        }
    }
    while (l1 != NULL)
    {
        ListNode *temp = new ListNode(l1->val);
        p->next = temp;
        p = temp;
        l1 = l1->next;
    }
    while (l2 != NULL)
    {
        ListNode *temp = new ListNode(l2->val);
        p->next = temp;
        p = temp;
        l2 = l2->next;
    }
    return head->next;
}

递归实现:免去新建链表 代码简洁 核心思想仍是归并

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    if (l1 == NULL)
        return l2;
    if (l2 == NULL)
        return l1;

    if(l1->val < l2->val)
    {
        l1->next = mergeTwoLists(l1->next,l2);
        return l1;
    }
    else
    {
        l2->next = mergeTwoLists(l1,l2->next);
        return l2;
    }