Skip to content

21、合并两个有序链表 #43

@hubvue

Description

@hubvue

题目

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

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

题解

解题思路

由于是合并两个链表,而是是有序,所以首先对两个链表统一遍历,终止条件就是任何一方到尾部,在遍历过程中判断节点值的大小往新开的链表上衔接。遍历完了之后两个链表要么都遍历完了,要么有一个剩余,然后分别遍历两个链表,把剩余的节点连接到新链表上。最终新链表就是合并并排序好的链表了。

代码

var mergeTwoLists = function(l1, l2) {
    if(!l1){
        return l2;
    }
    if(!l2){
        return l1;
    }
    let tempNode = new ListNode("head");
    let temp = tempNode;
    while(l1 !== null && l2 !== null){
        let node = new ListNode();
        if(l1.val <= l2.val){
            node.val = l1.val;
            tempNode.next = node;
            tempNode = node;
            l1 = l1.next;
        } else {   
            node.val = l2.val;
            tempNode.next = node;
            tempNode = node;
            l2 = l2.next;
        }
    }
    while(l1 !== null){
        let node1 = new ListNode();
        node1.val = l1.val;
        tempNode.next = node1;
        tempNode = node1;
        l1 = l1.next;
    }
    while(l2 !== null){
        let node2 = new ListNode();
        node2.val = l2.val;
        tempNode.next = node2;
        tempNode = node2;
        l2 = l2.next;
    }
    return temp.next;
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions