劍指offer-js 合併兩個排序的鏈表

合併兩個排序的鏈表

題目描述:

輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。

問題分析:

對於已經排序的兩個鏈表來說,合成一個不減的鏈表,核心就是通過比較,把小的放在鏈表前面,
然後進行逐個元素的循環,當有一個鏈表循環結束之後,就把另一個剩餘的直接掛上去

兩種方式:
	1,採用遞歸的方式(核心還是比較)
	2,創建一個新鏈表,通過比較,依次掛載節點

代碼展示:

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function Merge(pHead1, pHead2)
{
    //1,採用遞歸的方式
    if (pHead1 == null || pHead2 == null){
        return pHead1 || pHead2;
    }
    var newList = null;
    if (pHead1.val < pHead2.val){
        newList = pHead1;
        newList.next = Merge(pHead2,pHead1.next);
    } else {
        newList = pHead2;
        newList.next = Merge(pHead1,pHead2.next);
    }
    return newList;

    //2,創建新鏈表,進行比較賦值,把另一個剩下的直接鏈接到新鏈表的尾部
    var p = new ListNode(0),q = p;
    while(pHead1 != null&&pHead2 != null){
        if(pHead1.val < pHead2.val){
            p.next = pHead1;
            p = pHead1;
            pHead1 = pHead1.next; 
        }
        else{
             p.next = pHead2; 
             p = pHead2;
             pHead2 = pHead2.next; 
        }
    }
    if(pHead1 != null)
        p.next = pHead1;
    if(pHead2 != null)
        p.next = pHead2;
    return q.next;

}

類似

劍指offer-js 反轉鏈表
劍指offer-js 鏈表中倒數第k個結點

總結:

鏈表這塊,操作都在於節點,畢竟一個鏈表就只有val,next兩個屬性,通過兩個節點,三個節點,基本能完成
關於鏈表的問題,像環形鏈表,兩個鏈表的交點等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章