将由链表表示的两个数字相加

2023年 8月 27日 61.9k 0

将由链表表示的两个数字相加

这里我们将看到如何将存储在单独链表中的两个数字相加。在链表中,存储了数字的每一位数字。如果数字是 512,那么它将像下面一样存储 -

512 = (5)-->(1)-->(2)-->NULL

登录后复制

我们提供了两个这种类型的列表,我们的任务是将它们相加并在计算总和后得到结果。这里我们使用C++ STL链表。让我们看看算法来下注更好的想法。

算法

addListNumbers(l1, l2)

Begin
Adjust the l1 and l2 lengths by adding leading 0s with the smaller one
carry := 0
res := an empty list
for each node n from l1, scan from last to first, do
item := (l1.item + l2.item + carry) mod 10
insert item at the beginning of res
carry := (l1.item + l2.item + carry) / 10
done
if carry is not 0, then
add carry at the beginning of res
end if
return res
End

登录后复制

示例

#include
#include
using namespace std;
list addListNumbers(list l1, list l2){
//add leading 0s to the shortest number to make them equal length
if(l1.size() > l2.size()){
for(int i = l2.size(); i != l1.size(); i++){
l2.push_front(0);
}
}else if(l1.size() < l2.size()){
for(int i = l1.size(); i != l2.size(); i++){
l1.push_front(0);
}
}
list::reverse_iterator it1 = l1.rbegin();
list::reverse_iterator it2 = l2.rbegin();
list result;
int carry = 0;
while(it1 != l1.rend()){
result.push_front((*it1 + *it2 + carry) % 10);
carry = (*it1 + *it2 + carry) / 10;
it1++; it2++;
}
if(carry != 0){
result.push_front(carry);
}
return result;
}
list numToList(int n){
list numList;
while(n != 0){
numList.push_front(n % 10);
n /= 10;
}
return numList;
}
void displayListNum(list numList){
for(list::iterator it = numList.begin(); it != numList.end();
it++){
cout

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论