题目描述
解法一
迭代
思路:当 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; } } };
标签:pre,ListNode,Offer25,next,链表,l2,l1,排序 From: https://www.cnblogs.com/zc-030/p/17185085.html