Leetcode刷题(第21题)——合并两个有序链表

x33g5p2x  于2022-02-28 转载在 其他  
字(0.8k)|赞(0)|评价(0)|浏览(229)

一、题目描述

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

二、示例

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

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

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

三、思路
本题可以分为以下几种情况。
1、当l1存在,l2不存在时,直接返回l1
2、当l1不存在,l2存在时,直接返回l2
3、当l1和l2都不存在时,直接返回l1
4、当两者都存在时,此时进行while遍历。

四、代码展示

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} list1
 * @param {ListNode} list2
 * @return {ListNode}
 */
var mergeTwoLists = function(list1, list2) {
    if(list1 && !list2) return list1
    else if(!list1) return list2
    else {
        let p1 = list1
        let p2 = list2
        let head1 = new ListNode(0)
        let head2 = head1
        while(p1 && p2) {
            if(p1.val < p2.val) {
                head1.next = p1
                head1 = head1.next
                p1 = p1.next
            }else {
                head1.next = p2
                head1 = head1.next
                p2 = p2.next
            }
        }
        if(p1) head1.next = p1
        if(p2) head1.next = p2
        return head2.next
    }
};

五、总结

时间复杂度为O(n),空间复杂度为O(1)。

相关文章