題目描述
解題思路
題目說逆序方式儲存,其實這種逆序更方便了啊,本來正常的加法思維就是從低位開始。我自己的寫的有點複雜,沒有想到可以把鍊錶考慮成長度一樣,如果鍊錶為空就補0。
1、自己寫的
思路也很簡單,先把前面幾位重合的部分加起來,用乙個變數來記錄進製。因為另外乙個鍊錶後面可能出現99999這樣的極端情況,所以得再用乙個迴圈來判斷終止條件。
public listnode addtwonumbers
(listnode l1, listnode l2)
p.next =
(l1 == null)
?l2:l1;
while
(plus !=0)
else
p = p.next;
}return re.next;
}
2、鍊錶補齊長度
public listnode addtwonumbers
(listnode l1, listnode l2)
if(plus !=
0)
p.next =
newlistnode
(plus)
;return re.next;
}
提交結果:
雖然兩種方法提交結果看起來差不多,但是後面的方法很明晰簡潔和清晰很多!
複雜度分析
時間複雜度:o(max(m,n)),假設 m 和 n 分別表示 l1 和 l2 的長度,上面的演算法最多重複 max(m,n) 次。
空間複雜度:o(max(m,n)), 新列表的長度最多為 max(m,n)+1。
2 兩數相加
平均星級 4.45 239次評分 2018年2月2日 28.6k次 預覽 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 ...
2 兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807 definition for singly l...
2 兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807演算法 我們首先從最低有效位也就是列表 l1和...