链表:合并两个排序的链表

118 阅读1分钟

image.png

方法: 声明一个新的节点,存储新的链表。 由于是排好序的链表,所以链表前面的节点一定是最小的,所以我们只要依次对比两个链表的头节点,将小的节点放入新链表即可。

function ListNode(x){
    this.val = x;
    this.next = null;
}
function Merge(pHead1, pHead2)
{
    if(!pHead1) return pHead2; // 异常判断
    if(!pHead2) return pHead1;
    
    let headNode = new ListNode(-1); // 新链表的头节点
    let cur = headNode; // 存储最新保存的节点
    while(pHead1 && pHead2) {
        const val1 = pHead1.val;
        const val2 = pHead2.val;
        if(val1 <= val2) { // 谁小就存入新的链表
            cur.next = pHead1
            pHead1 = pHead1.next;
        } else {
            cur.next = pHead2;
            pHead2 = pHead2.next;
        }
        cur = cur.next; // 更新节点
    }
    
    cur.next = pHead1 ? pHead1 : pHead2; // 若对比完,有剩余节点,直接存入新链表
    
    return headNode.next; // 返回新链表
}