14.兩個單鏈表相加

【題目】

給定兩個用鏈表表示的整數,每個節點包含一個數位。
例如:鏈表1爲9-> 3 -> 7,鏈表2爲6 -> 3,最後生成的結果爲1 -> 0 -> 0 -> 0。

【代碼1】

時間複雜度O(n),空間複雜度O(n)

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        Stack<Integer> stack1 = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();
        while (l1 != null) {
            stack1.push(l1.val);
            l1 = l1.next;
        }
        while (l2 != null) {
            stack2.push(l2.val);
            l2 = l2.next;
        }
        int n1 = 0;
        int n2 = 0;
        int ca = 0;
        int n = 0;
        ListNode node = null;
        ListNode pre = null;
        while (!stack1.isEmpty() || !stack2.isEmpty()) {
            n1 = stack1.isEmpty() ? 0 : stack1.pop();
            n2 = stack2.isEmpty() ? 0 : stack2.pop();
            n = n1 + n2 + ca;
            pre = node;
            node = new ListNode(n % 10);
            node.next = pre;
            ca = n / 10;
        }
        if (ca == 1) {
            pre = node;
            node = new ListNode(1);
            node.next = pre;
        }
        return node;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章