Typescript-Algorithms
    Preparing search index...

    Variable merge_two_sorted_listsConst

    merge_two_sorted_lists: (
        list1: null | ListNode,
        list2: null | ListNode,
    ) => null | ListNode = mergeTwoLists

    21.合并两个有序链表

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


    示例1

    输入: list1 = [1,2,4], list2 = [1,3,4]
    输出: [1,1,2,3,4,4]


    输入: list1 = [], list2 = []
    输出: []


    输入: list1 = [], list2 = [0]
    输出: [0]


    • 两个链表的节点数目范围是 [0, 50]
    • -100 <= Node.val <= 100
    • list1list2 均按 非递减顺序 排列

    Type declaration

      • (list1: null | ListNode, list2: null | ListNode): null | ListNode
      • Definition for singly-linked list. class ListNode { val: number next: ListNode | null constructor(val?: number, next?: ListNode | null) { this.val = (val===undefined ? 0 : val) this.next = (next===undefined ? null : next) } }

        Parameters

        • list1: null | ListNode
        • list2: null | ListNode

        Returns null | ListNode

    • 创建一个虚拟头节点,然后遍历两个链表,谁小谁就插到新链表的后面。
    • 当两个链表其中一个遍历完成,则把另一个链表剩余的节点直接插到新链表的后面。
    /**
    * Definition for singly-linked list.
    * class ListNode {
    * val: number
    * next: ListNode | null
    * constructor(val?: number, next?: ListNode | null) {
    * this.val = (val===undefined ? 0 : val)
    * this.next = (next===undefined ? null : next)
    * }
    * }
    */

    function mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null {
    const dummy = new ListNode(-1, null);
    let tail = dummy;
    let l1 = list1;
    let l2 = list2;

    while (l1 && l2) {
    if (l1.val <= l2.val) {
    tail.next = l1;
    l1 = l1.next;
    }
    else {
    tail.next = l2;
    l2 = l2.next;
    }

    tail = tail.next;
    }

    tail.next = l1 ?? l2;

    return dummy.next;
    };