六、劍指 Offer(25~29)

重啟試試.發表於2021-01-05


一、25 合併兩個排序的連結串列

1.演算法描述

輸入兩個遞增排序的連結串列,合併這兩個連結串列並使新連結串列中的節點仍然是遞增排序的。

2.演算法題解

根據連結串列 l1、l2 是遞增的,因此可以使用雙指標遍歷連結串列,根據 val1、val2 的大小關係確定節點新增順序,兩指標交替前進,直至遍歷完成。

由於初始狀態合併連結串列中無節點,因此需要初始化一個輔助節點 root 作為合併連結串列的偽頭結點。

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode root = new ListNode(0), cur = root;
        while (l1 != null && l2 != null) {
            if (l1.val < l2.val) {
                cur.next = l1;
                l1 = l1.next;
            } else {
                cur.next = l2;
                l2 = l2.next;
            }
            cur = cur.next;
        }
        cur.next = l1 != null ? l1 : l2;
        return root.next;
    }
}

一、26 樹的子結構

1.演算法描述

輸入兩棵二叉樹A和B,判斷B是不是A的子結構。(約定空樹不是任意一個樹的子結構)

B是A的子結構, 即 A中有出現和B相同的結構和節點值。

2.演算法題解

一、25 合併兩個排序的連結串列

1.演算法描述

輸入兩個遞增排序的連結串列,合併這兩個連結串列並使新連結串列中的節點仍然是遞增排序的。

2.演算法題解

相關文章