21.合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:

输入:l1 = [], l2 = []
输出:[]
示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:

两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列

 方法一:递归

时间复杂度:O(n+m)

空间复杂度:O(n+m)

复制代码
 1 /**
 2  * Defination for singly-linked list.
 3  * function ListNode(val,next){
 4  * this.val=(val===undefined?0:val)
 5  * this.next=(next===undefined?null:next)
 6  * }
 7  */
 8 /**
 9  * @param {ListNode} list1
10  * @param {ListNode} list2
11  * @return {ListNode}
12  */
13 var mergeTwoLists = function(list1, list2) {
14     if (list1 === null) {
15         return list2;
16     } else if (list2 === null) {
17         return list1;
18     } else if (list1.val < list2.val) {
19         list1.next = mergeTwoLists(list1.next, list2);
20         return list1;
21     } else {
22         list2,
23         (next = mergeTwoLists(list1, list2.next));
24         return list2;
25     }
26 };
复制代码

方法二:迭代

时间复杂度:O(n+m)

空间复杂度:O(1)

复制代码
 1 /**
 2  * Defination for singly-linked list.
 3  * function ListNode(val,next){
 4  * this.val=(val===undefined?0:val)
 5  * this.next=(next===undefined?null:next)
 6  * }
 7  */
 8 /**
 9  * @param {ListNode} list1
10  * @param {ListNode} list2
11  * @return {ListNode}
12  */
13 var mergeTwoLists = function(list1, list2) {
14     //哨兵节点prehead
15     const prehead = new ListNode(-1);
16     let prev = prehead;
17     while (list1 !== null && list2 !== null) {
18         if (list1.val <= list2.val) {
19             prev.next = list1;
20             list1 = list1.next;
21         } else {
22             prev.next = list2;
23             list2 = list2.next;
24         }
25         prev = prev.next;
26     }
27     prev.next = list1 === null ? list2 : list1;
28     return prehead.next;
29 };
复制代码
posted @   icyyyy  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示