leetcode 21 合併兩個有序鏈表 JavaScript解題

本題連接 leetcode-cn.com/problems/me…
這道題是一道鏈表的題目,咱們能夠用遞歸來實現,直接貼代碼:bash

/**
 * 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;
    if (l1.val < l2.val) {
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;
    }
    else {
        l2.next = mergeTwoLists(l1, l2.next)
        return l2
    }
};
複製代碼

咱們用L1和L2表明兩個鏈表,遞歸的思路以下:ui

  • 若是L1爲空就返回L2,L2爲空就返回L1;
  • L1和L2的val做比較,若是L1的val更小,就將L1的next指向後續的節點,在後續的節點裏,又讓L1.next與L2的val做比較,誰更小,就又讓誰的next指向後續的節點。以後繼續重複以前的步驟,L2同理。

假設L1的長度爲m,L2的長度爲n,時間複雜度爲o(m + n)。this

相關文章
相關標籤/搜索