将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
昨天看到了这道题,于是选择先去将设计链表的题做掉了。
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function (l1, l2) {
//声明一个节点
var head = new ListNode(-1);
//声明一个中间节点
var flag = head;
//当两个链表都不为空的时候,进行循环
while (l1 != null && l2 != null) {
//判断两个链表第一个节点的大小
if (l1.val <= l2.val) {
//将中间节点的next指向第一个节点比较小的链表
flag.next = l1;
//将l1链表向后移动一个节点,也就是把第一个节点切割出去了。因为第一个节点符合条件已经不需要循环判断了
l1 = l1.next;
} else {
//整体思路和上一个分支一致
flag.next = l2;
l2 = l2.next;
}
//判断之后将中间节点向后移动一位
flag = flag.next;
}
//如果某个链表为null 则直接将flag.next指向另一个链表
flag.next = l1 ? l1 : l2;
//返回head节点的next。
return head.next;
};
这道题还有一种递归的解法,真的是太简洁了
因为这个字体小写L和数字1长得实在太像了,我给改成大写的了。
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} L1
* @param {ListNode} L2
* @return {ListNode}
*/
var mergeTwoLists = function(L1, L2) {
if(L1 == null){
return L2;
}
if(L2 == null){
return L1;
}
if(L1.val <= L2.val){
L1.next = mergeTwoLists(L1.next,L2);
return L1;
}else{
L2.next = mergeTwoLists(L1,L2.next);
return L2;
}
}
最后一次更新于2020-04-22
0 条评论