高端网站建设 恩愉科技,常用的网页开发技术有哪些,wordpress zerif lite,网站推广软文选择天天软文【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主#xff0c;题解使用C语言。#xff08;若有使用其他语言的同学也可了解题解思路#xff0c;本质上语法内容一致题解使用C语言。若有使用其他语言的同学也可了解题解思路本质上语法内容一致 【题目描述】
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
【示例一】 输入l1 [1,2,4], l2 [1,3,4]
输出[1,1,2,3,4,4]
【示例二】
输入l1 [], l2 []
输出[]
【示例三】
输入l1 [], l2 [0]
输出[0]
【提示及数据范围】
两个链表的节点数目范围是 [0, 50]-100 Node.val 100l1 和 l2 均按 非递减顺序 排列
【代码】
// 方法一递归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;}}
};// 方法二迭代
class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* preHead new ListNode(-1);ListNode* prev preHead;while (l1 ! nullptr l2 ! nullptr) {if (l1-val l2-val) {prev-next l1;l1 l1-next;} else {prev-next l2;l2 l2-next;}prev prev-next;}// 合并后 l1 和 l2 最多只有一个还未被合并完我们直接将链表末尾指向未合并完的链表即可prev-next l1 nullptr ? l2 : l1;return preHead-next;}
};