[leetcode-JavaScript]--21.合併兩個有序鏈表

題目

將兩個有序鏈表合併爲一個新的有序鏈表並返回。新鏈表是經過拼接給定的兩個鏈表的全部節點組成的。javascript

示例:
    輸入:1->2->4, 1->3->4
    輸出:1->1->2->3->4->4
複製代碼

思考

  1. 判斷兩個鏈表是否爲空鏈表,若是l1爲null,直接返回l2;若是l2爲null,直接返回l1
  2. 設置一個變量temp指向newHead節點,用於以後鏈接其它節點
  3. 比較l一、l2兩個節點,選出最小的節點,合併到newHead,同時選出最小節點的鏈表後移,方便接下來的比較,newHead=newHead.next
  4. 重複比較l1和l2節點,直到l1或l2節點爲null
  5. 此時,一定有一個鏈表中的全部節點都放入了新鏈表中,只要將另外一個鏈表中的剩餘的全部節點都接到新鏈表以後就能夠了

解決方法

  • 迭代方法
/* * @lc app=leetcode.cn id=21 lang=javascript * * [21] 合併兩個有序鏈表 */
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */
/** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */
var mergeTwoLists = function(l1, l2) {
    if(l1===null){
        return l2;
    }else if(l2===null){
        return l1;
    }
    let newHead=new ListNode(0);
    let temp=newHead;
    while(l1 || l2){
        if(l1===null){
            newHead.next=l2;
            break;
        }
        if(l2===null){
            newHead.next=l1;
            break;
        }
        if(l1.val<=l2.val){
            newHead.next=l1
            newHead=newHead.next;
            l1=l1.next;
        }else{
            newHead.next=l2;
            newHead=newHead.next;
            l2=l2.next;
        }
    }
    return temp.next;
};
複製代碼
  • 遞歸方法
var mergeTwoLists = function(l1, l2) {
    if(l1===null){
        return l2;
    }else if(l2===null){
        return l1;
    }
    if(l1.val<l2.val){
        l1.next=mergeTwoLists(l1.next,l2)
        return l1
    }else{
        l2.next=mergeTwoLists(l1,l2.next)
        return l2
    }
};
複製代碼

說明

相關文章
相關標籤/搜索