【刷算法】兼并兩個排序的單鏈表

問題形貌

輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,固然我們須要合成后的鏈表滿足單調不減劃定規矩。

剖析

起首斟酌兩個鏈表的頭部哪一個成為新鏈表的頭,顯然是值小的誰人是新的頭;

然後是兼并時,兩個鏈表上離別有一個指針cur1和cur2,比較兩個指針指向的節點值大小,較小的鏈接到新鏈表的尾部,且指針今後挪動一個,較大的則不動;
可能有某個鏈表未遍歷完,直接將其全添加到新鏈表尾部即可。

代碼完成

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function Merge(h1, h2)
{
    if(h1 === null && h2 === null)
        return;
    if(h1 ===  null)
        return h2;
    if(h2 === null)
        return h1;
    
    var newH = null, cur1 = null, cur2 = null, newE = null;
    if(h1.val < h2.val){
        newH = h1;
        cur1 = h1.next;
        cur2 = h2;
    }
    else{
        newH = h2;
        cur1 = h1;
        cur2 = h2.next;
    }
    newE = newH;
    while (cur1 !== null && cur2  !== null) {
        if(cur1.val < cur2.val){
            newE.next = cur1;
            cur1 = cur1.next;
        }else{
            newE.next = cur2;
            cur2 = cur2.next; 
        } 
         newE = newE.next;
    }
    while(cur1 !== null){
        newE.next = cur1;
        cur1 = cur1.next;
    }
    while(cur2 !== null){
        newE.next = cur2;
        cur2 = cur2.next;
    }
    
    return newH;
}
    原文作者:亞古
    原文地址: https://segmentfault.com/a/1190000015441471
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞