/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
// 结果链表
ListNode *head = new ListNode(-1);
// 用来移动指针
ListNode *h = head;
// 存每一位的数字
int sum = 0;
// 判断是否需要进位
int jw = false;
while (l1 != nullptr || l2 != nullptr)
{
// 每次初始化为0
sum = 0;
if (l1 != nullptr)
{
sum += l1->val;
l1 = l1->next;
}
if (l2 != nullptr)
{
sum += l2->val;
l2 = l2->next;
}
// 如果收到上一位传递来的进位信号,那么这一位就加1
if (jw) sum++;
// 创建新的节点
h->next = new ListNode(sum % 10);
// 指针后移,指向新的节点
h = h->next;
// 判断下一位是否需要进位
jw = (sum >= 10) ? true : false;
}
// 特判,最后一位是否需要进位
if (jw) h->next = new ListNode(1);
return head->next;
}
};