剑指 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; } } };

浙公网安备 33010602011771号