給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
高階:
如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。
示例:
輸入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)輸出: 7 -> 8 -> 0 -> 7
2.1 思路
(1)將兩個鍊錶反轉,就變成了leetcode上的第二道題目「2.兩數相加」;
(2)然後就是一樣的思路:題中鍊錶順序正好是低位到高位,先低位相加,有進製保持,下一位計算加上進製,直到最高位相加,如果有進製,生成新的結點儲存。
2.2 **
classsolution
return
h; }
listnode* addtwonumbers(listnode* l1, listnode*l2)
//最後的進製
if (carry == 1
)
//還原鍊錶
hl3->next = solution::reverselist(hl3->next);
return hl3->next;
}};
3.1 思路
關鍵還是在於逆序,棧結構適應於這種情況。不需要考慮空間複雜性的話,為了方便,使用三個棧
3.2 **
#include #includeusing
namespace
std;
struct
listnode
};class
solution
while (l2 !=null)
//用棧來相加
int a = 0
;
int b = 0
;
int temp = 0
;
int carry = 0
;
while (!s1.empty() || !s2.empty())
if (carry == 1
) s3.push(1);
//恢復順序
while (!s3.empty())
return hl3->next;
}};int
main()
return0;
}
leetcode 445 兩數相加 II
給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。輸入 7 2 4 3 5 6 4 輸出 7 8 0 7 分別遍歷兩個鍊錶,將鍊錶代表的數存於a,b 根據a,b的和,用...
Leetcode445 兩數相加 II
給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 如果輸入鍊錶不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 ...
LeetCode 445 兩數相加II(Java)
給定兩個非空鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。高階 鍊錶不能修改該,換句話說,你不能對列表中的節點進行翻轉。示例 輸入 7 2 4 3 5 6 4 輸出 7 8 0...