两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
解答代码
没什么特别好说的题目,也就有两个代码方面的小问题而已。采用了两个小技巧进行应对。
例如如果直接返回指针answer,那么answer怎么初始化,链表结尾怎么做成null都会是问题,简单粗暴地返回answer->next,就避免了answer初始化的问题。
以及要注意,例如99 + 5 的情况下,答案是要进位变成104的,比两个加数长度都长,这点要注意考虑到,就没什么特别的了。
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *answer = new ListNode(0);
ListNode *curr = answer;
int position = 0;
while (l1 != NULL || l2 != NULL) {
if (l1 == NULL) {
curr->next = new ListNode((position + l2->val) % 10);
position + l2->val > 9 ? position = 1 : position = 0;
curr = curr->next;
l2 = l2->next;
continue;
}
if (l2 == NULL) {
curr->next = new ListNode((position + l1->val) % 10);
position + l1->val > 9 ? position = 1 : position = 0;
curr = curr->next;
l1 = l1->next;
continue;
}
curr->next = new ListNode((position + l2->val + l1->val) % 10);
position + l2->val + l1->val > 9 ? position = 1 : position = 0;
curr = curr->next;
l1 = l1->next;
l2 = l2->next;
}
if (position) {
curr->next = new ListNode(1);//这里解决最终的进位问题。
}
return answer->next;
}
};