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

题目描述

 

 

 解法一

迭代

思路:当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
       // 创建哨兵节点 ListNode
*prehead = new ListNode(-1); ListNode *pre = prehead; while(l1 != nullptr && l2 != nullptr){ if(l1->val < l2->val){ pre->next = l1; l1 = l1->next; } else{ pre->next = l2; l2 = l2->next; } pre = pre->next; }
       //如果一个链表空了,则直接连在后面 pre
->next = l1 ==nullptr ? l2 : l1; return prehead->next; } };

解法二

递归

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

 

posted @ 2023-03-06 19:23  盏茶  阅读(12)  评论(0)    收藏  举报