前端卷算法系列(六)
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
来源:力扣(LeetCode)
解题思路
一开始看到这个题目我想了一下好家伙用Array.concat
和Array.sort
合并并且排序一下不就行了吗?
但是事实并非如此,代码如下:
/**
* @param {ListNode} list1
* @param {ListNode} list2
* @return {ListNode}
*/
var mergeTwoLists = function (list1, list2) {
return list1.concat(list2).sort();
};
这么简单
然而事实并非如此,提交到力扣的时候报错了
简单意思就是返回并非是链表结构而是数组
而题目要的结构类似如下
[
{
value: 1,
next: 2
},
{
value: 2,
next: 3
}
]
链表的结构是由当前节点和指向下一个节点的索引
组成,做前端把以前的数据结构知识都忘光了
那么就下来就来实现有序链表和并
,主要是通过递归
和迭代
递归方式
:
/**
* @param {ListNode} list1
* @param {ListNode} list2
* @return {ListNode}
*/
var mergeTwoLists = function(list1, list2) {
if (!list1) {
return list2;
}
if (!list2) {
return list1;
}
if (list1.val < list2.val) {
list1.next = mergeTwoLists(list1.next, list2);
return list1;
} else {
list2.next = mergeTwoLists(list1, list2.next);
return list2;
}
};
list2.next = mergeTwoLists(list1, list2.next);
return list2;
}
};
