leetCode刷题_23. 合并K个升序链表

79 阅读1分钟

思路: dummy虚拟节点

  • 这边采用typescript进行刷题,首先建立额外一个虚拟节点,然后比较两个节点的大小,比较出结果了之后进行连接,需要注意的点当其中一个节点走到了null之后,另外一个节点剩下的值也需要拼接到dummy节点,因为另外一个node没有指到null,还没有走完。
/**
 * 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)
 *     }
 * }
 */

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)
    }
}

let A = new ListNode(1)
let B = new ListNode(2)
let C = new ListNode(4)

let D = new ListNode(1)
let E = new ListNode(3)
let F = new ListNode(4)

A.next = B
B.next = C
D.next = E
E.next = F

function printLinkedNode(node: ListNode) {
    let str = ''
    while(node) {
        if(node) {
            str+=node.val+'->'
        }
        node = node.next
    }
    console.log(str)
}
// printLinkedNode(A)
function mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null {
    let Dummy = new ListNode();
    let A = list1;
    let B = list2;
    let C = Dummy;
    while(A && B) {
        if(A.val<B.val) {
            C.next = A;
            A = A.next;
        } else {
            C.next = B;
            B = B.next;
        }
        C = C.next;
    }
    if(A) {
        C.next = A
    }
    if(B) {
        C.next = B
    }
    // printLinkedNode(Dummy);
    return Dummy.next;
}

mergeTwoLists(A,D)