雙指針/鏈表 leecode 21 合併兩個有序鏈表 (Easy)

題目

將兩個升序鏈表合併爲一個新的升序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 

示例:

輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4

解析

思路:

  • 創建一個新鏈表
  • 使用雙指針遍歷兩個鏈表
/**
 * 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;
    if(l2 == null) return l1;
    // 創建一個頭結點
    let head = new ListNode(-1);
    let p  = head;
    // 雙指針遍歷兩個鏈表
    while(l1 != null && l2 != null){
        if(l1.val <= l2.val){
            p.next = l1;
            l1 = l1.next;
        }else {
            p.next = l2;
            l2 = l2.next;   
        }
        p = p.next;
    }
    // 如果l1不爲空
    if(l1 != null) {
       p.next=  l1; 
    }
    // 如果l2不爲空
    if(l2 != null){
        p.next = l2;
    }
    return head.next;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章