條件:給定兩個非空鍊錶來代表兩個非負整數。
數字最高位位於鍊錶開始位置。
它們的每個節點只儲存單個數字。
將這兩數相加會返回乙個新的鍊錶。
你可以假設除了數字 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...