考察了对链表的使用
/**
* 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 = nullptr, *tail = nullptr;
int last=0; //保存进位
while(l1 || l2) { //有一个链表非空则继续计算
int sum = 0; //保存当前和
if(l1) sum += l1->val;
if(l2) sum += l2->val;
sum += last;
last=sum/10; //更新进位
if(!head) head = tail = new ListNode(sum%10); //没有头结点,所以第一个节点就是结构体节点,需要特判一下
else {
tail->next = new ListNode(sum%10);
tail = tail->next;
}
if(l1) l1 = l1->next;
if(l2) l2 = l2->next;
}
if(last) tail->next = new ListNode(last); //最后特判是否进位
return head;
}
};