前端卷算法系列(六)

前端卷算法系列(六)

合并两个有序链表

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

示例 1:

img

输入: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();
    };

这么简单

image-20230430075217571

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

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

而题目要的结构类似如下

[
	{
	  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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值