Add Two Numbers
题目理解
输入两个单向列表,输出两个列表进行十进制加法的结果
分析
模拟最原始的十进制加法,进行加法和进位处理,判断链表有没有用完
代码
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* l3 = new ListNode();
ListNode* cursor = new ListNode();
cursor = l3;
int sum = 0;
int carry = 0;
while (l1 != nullptr || l2 != nullptr || carry != 0)
{
if (l1 != nullptr && l2 != nullptr)
{
sum = l1->val + l2->val + carry;
l1 = l1->next;
l2 = l2->next;
}
else if (l1 != nullptr)
{
sum = l1->val + carry;
l1 = l1->next;
}
else if (l2 != nullptr)
{
sum = l2->val + carry;
l2 = l2->next;
}
else
{
sum = carry;
}
cursor->next = new ListNode(sum % 10);
carry = sum / 10;
cursor = cursor->next;
}
return l3->next;
}
};
思考
一万年没用C++了,有很多陌生的地方。
使用了未初始化的内存
我总记得以前int类型声明之后不需要定义
数组声明后默认值不是0
好像和编译器有关系,有些编译器下会自动初始化的,有些不会。编译器大佬来解释下