/**
* 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) {
//给了两个结点
int carry = 0; //进位
ListNode *head=nullptr; //结算结果链表
ListNode *tail=nullptr;
while(l1||l2) //结点l1或者l2不等于空,执行下面
{
int n1 = l1 ? l1->val:0; //用三目运算符判断l1和l2是否为0,是为0,否为值
int n2 = l2 ? l2->val:0; //用n1和n2接收
int sum = n1 + n2 +carry;
if(!head) //头结点为空执行
{
head = tail = new ListNode(sum%10);
}
else
{
tail->next = new ListNode(sum%10);
tail = tail ->next; //尾巴next后面是没东西的
}
carry = sum/10;
if(l1)
{
l1=l1->next;
}
if(l2)
{
l2=l2->next;
}
}
//最后计算进位
if(carry)
{tail->next = new ListNode(carry);}
return head;
}
};