前端卷算法系列(六)

前端卷算法系列(六)

合并两个有序链表

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

示例 1:

前端卷算法系列(六)_第1张图片

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

来源:力扣(LeetCode)

解题思路

一开始看到这个题目我想了一下好家伙用Array.concatArray.sort合并并且排序一下不就行了吗?

但是事实并非如此,代码如下:

/**
     * @param {ListNode} list1
     * @param {ListNode} list2
     * @return {ListNode}
     */
    var mergeTwoLists = function (list1, list2) {
        return list1.concat(list2).sort();
    };

这么简单

前端卷算法系列(六)_第2张图片

然而事实并非如此,提交到力扣的时候报错了

前端卷算法系列(六)_第3张图片

简单意思就是返回并非是链表结构而是数组

而题目要的结构类似如下

[
	{
	  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;
}
};


![image-20230501081122094](https://img-blog.csdnimg.cn/img_convert/012973f359212c668a715ae46a16e309.png)

你可能感兴趣的:(算法系列,算法,链表,数据结构)