分析
加法就是低位先加。有进位就进位。通过变量将进位保存起来,下一位运算把进位数加上即可。
难点: 两个数的长度不一致。
解决办法: 正好因为是低位先存,高位在后边。使两个链表一样长就可以直接遍历运算了。高位补零无影响,遍历到后面为0即可。
直接上代码:
typedef list<int> list_i;
typedef list<int>::iterator listPtr_i;
list_i addTwo(list_i & num1, list_i & num2)
{
list_i sum;//新的链表
listPtr_i Ptr1 = num1.begin();
listPtr_i Ptr2 = num2.begin();
int temp1 = 0;
int temp2 = 0;
int carry=0;
while (!((Ptr1 ==num1.end())&&(Ptr2==num2.end())))
{
if (Ptr1 == num1.end())
{
temp1 = 0;
}
else
{
temp1 = *Ptr1;
Ptr1++;
}
if (Ptr2 == num2.end())
{
temp2=0;
}
else
{
temp2 = *Ptr2;
Ptr2++;
}
carry = temp1 + temp2+carry;
sum.push_back(carry % 10);
carry /= 10; //用判断也可
}
return sum;
}