class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *head = nullptr, *tail = nullptr; //head和tail所构建的节点为结果链表
int carry = 0; //首先把进位的值设为0
while (l1 || l2) { //当链表l1和l2都不为空时
int n1 = l1 ? l1->val: 0; //三目运算符,若l1是不是空指针,则返回l1的value,否则返回0
int n2 = l2 ? l2->val: 0;
int sum = n1 + n2 + carry; //sum要加上上一步运算后进位的值
if (!head) { //若head为空
head = tail = new ListNode(sum % 10); //head=tail等于新的节点,节点中value=sum%10;
//new函数是构建新对象特别好的方法,重点学习
} else {
tail->next = new ListNode(sum % 10); //head不为空,从tail向下构建新节点
tail = tail->next;
}
carry = sum / 10;
if (l1) {
l1 = l1->next; //若l1不为空指针,即下一个节点还有值,就跳向下一个节点
}
if (l2) {
l2 = l2->next;
}
}
if (carry > 0) { //最后一步相加后,有进位的值,新建节点存储进位的carry
tail->next = new ListNode(carry);
}
return head;
}
};