c_cpp 合并两个排序列表,递归和迭代

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 合并两个排序列表,递归和迭代相关的知识,希望对你有一定的参考价值。

ListNode* merge_two_sorted_lists_recursive(ListNode *L1, ListNode *L2) {
    if(!L1) return L2;
    if(!L2) return L1;
    ListNode *head = NULL;
    if(L1->val < L2->val) {
        head = L1;
        head->next = merge_two_sorted_lists_recursive(L1->next, L2);
    }
    else {
        head = L2;
        head->next = merge_two_sorted_lists_recursive(L1, L2->next);
    }
    return head;
}

ListNode* merge_two_sorted_lists_iterative(ListNode *L1, ListNode *L2) {
    if(!L1) return L2;
    if(!L2) return L1;
    ListNode *p1 = L1, *p2 = L2;
    ListNode *head = NULL;
    if(p1->val < p2->val) {
        head = p1;
        p1 = p1->next;
    } else {
        head = p2;
        p2 = p2->next;
    }
    
    ListNode *tail = head;
    while(p1 && p2) {
        if(p1->val < p2->val) {
            tail->next = p1;
            p1 = p1->next;
        } else {
            tail->next = p2;
            p2 = p2->next;
        }
        tail = tail->next;
    }
    /* wrong
    if(p1) tail->next = p1;
    if(p2) tail->next = p2;
    tail->next = NULL; */
    
    if(p1) tail->next = p1;
    else tail->next = p2;
    
    return head;
}

以上是关于c_cpp 合并两个排序列表,递归和迭代的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 合并两个已排序的链接列表,使合并列表的顺序相反

c_cpp 21.合并两个排序列表

c_cpp 合并两个已排序的链接列表

c_cpp 21.合并两个排序列表 - 难度容易 - 2018.8.10

c_cpp 查找链接列表的长度(迭代和递归)

c_cpp 搜索链接列表中的元素(迭代和递归)