給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例:輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
演算法思路和官方相同,但就語句而言或許可以進一步優化
關鍵**:
listnode result= new listnode(0); //當前節點,進行迭代
listnode head = result; //
頭節點int next = 0; //
若相加大於10進製則next==1
while (l1 != null || l2 != null
)
else
if (l1 != null) //
l1和l2不為空時迭代
l1 =l1.next;
if (l2 != null
) l2 =l2.next;
if (l1 == null && l2 == null) //
同時為空時結束,避免下方語句進行使得結果錯誤
break
; result.next = new listnode(0
); result =result.next;
}if (next == 1) //
出現進製但l1和l2下一數字都為0時上述迴圈無法進行,做特殊處理
return head;
完整**:
usingsystem;
namespace
numadd
}class
program
else
if (l1 != null) //
l1和l2不為空時迭代
l1 =l1.next;
if (l2 != null
) l2 =l2.next;
if (l1 == null && l2 == null) //
同時為空時結束,避免下方語句進行使得結果錯誤
break
; result.next = new listnode(0
); result =result.next;
}if (next == 1) //
出現進製但l1和l2下一數字都為0時上述迴圈無法進行,做特殊處理
return
head;
}static
void main(string args) //
簡單測試}}
}
演算法從最低一位開始相加,大於9則進製處理,直至到最後處理完成
以下特別情況要特別注意:
測試用例
說明l1=[0,1],l2=[0,1,2]l2=[0,1,2]
當乙個列表比另乙個列表長時
l1=,l2=[0,1]l2=[0,1]
當乙個列表為空時,即出現空列表
l1=[9,9],l2=[1]l2=[1]
求和運算最後可能出現額外的進製,這一點很容易被遺忘
資料結構演算法 atoi 和兩數相加
leetcode 8atoi 2addtwonumbers 在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。...
演算法練習 兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
兩數相加c 演算法篇 鍊錶之兩數相加
演算法 核心問題是進製的操作 1 不要忘記進製之後的哪乙個1 2 不要忘記所有位都操作完了之後,最後的哪乙個進製1 變形題目的話,需要想辦法轉換成 題目1這種原子操作的題目。題目 1 兩數相加 演算法 核心問題是 進製的操作,1 不要忘記進製之後的哪乙個1 2 不要忘記所有位都操作完了之後,最後的哪...