leetcode 兩數相加 II

2021-10-02 05:32:15 字數 1283 閱讀 3075

條件:

給定兩個非空鍊錶來代表兩個非負整數。

數字最高位位於鍊錶開始位置。

它們的每個節點只儲存單個數字。

將這兩數相加會返回乙個新的鍊錶。

你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。

高階:如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。

eg:l1 (2 -> 4 -> 3 -> 6)

l2 (5 -> 6 -> 4)

res (3 -> 0 -> 0 -> 0)

public listnode addtwonumbers2

(listnode l1, listnode l2)

else

int len = math.

max(len1, len2)

; listnode temp1 = null;

int length = len;

// 逐個相加並反轉結果鍊錶. 反轉是為了後續進製

// 如示例temp1迴圈後為 10->9->9->2

while

(length--

>0)

listnode temp2 = null;

int carry =0;

// 處理大於10的節點進製並反轉結果倒序變成順序

// 10->9->9->2 => 3->0->0->0

while

(len--

>0)

// 處理最後還有進製的前面補1。

// 如temp2 = 8->8 + 2 -> 2 = 1->0, carry = 1。補1就是最終結果110

listnode result = temp2;

if(carry ==1)

return result;

}private listnode fillzero

(listnode node,

int i)

return node;

}private

intlength

(listnode node)

return length;

}/**

class listnode

}*/

一般還可以遞迴,雙棧法求解。

雙棧法最好理解算是變一種方式逆轉了輸入鍊錶變成了兩數相加1。

我這種是補0,相加並反轉,處理進製再反轉回來。算是取巧。

leetcode 兩數相加II

給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 ...

兩數相加 II

給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 ...

兩數相加 II

1.問題描述 給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3...