天天看点

LeetCode-21.合并两个有序链表

21.题目:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:

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

输入:l1 = [], l2 = [0]
输出:[0]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
           
LeetCode-21.合并两个有序链表

代码:

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var mergeTwoLists = function(l1, l2) {
    let dummy = new ListNode();
    let curr = dummy;
    while(l1 !== null && l2 !== null) {
        if(l1.val < l2.val) {
            curr.next = l1;
            l1 = l1.next;
        } else {
            curr.next = l2;
            l2 = l2.next;
        }
        curr = curr.next;
    }
    if (l1 !== null) {
        curr.next = l1;
    } else {
        curr.next = l2;
    }
    return dummy.next;
};

           

图解算法:

LeetCode-21.合并两个有序链表

题解:

  1. 首先,合并两个有序链表,从题目中我们可以知道两个信息,一个是有序,一个是链表。
  2. 创建一个虚拟节点,当前指针指向虚拟节点;
  3. l1链表

    l2链表

    均不为空的情况下,就要进行一一对比;
  4. l1.val < l2.val

    , 就说明

    l1

    的值比

    l2

    的值要小,所以当前指针的

    next

    指向

    l1

    l1

    向后走一位;
  5. 反之,则是

    curr.next = l2.val, l2 = l2.next

    ;
  6. 如果循环比较到其中一个链表已经为空的情况下,就可以将还没比较完的l1或者l2直接链接在后面;
  7. 最后,返回虚拟节点的下一位。