兩數相加(C 資料結構和演算法練習)

2022-08-30 21:09:27 字數 1917 閱讀 6457

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。

如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。

您可以假設除了數字 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;

完整**:

using

system;

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 不要忘記所有位都操作完了之後,最後的哪...