两点考虑,第一点,两个链表长度可能不等,第二点,加完以后可能还有最后一个进位。
此外,题中构建链表的方法可以,先定义head和tail都指向nullptr,然后第一个插入结点时让head和tail同时指向第一个结点,接下来用tail来滑动增加结点。构造链表的时候一定得用两个指针才行。
/**
* 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 *a1 = l1, *a2 = l2;
ListNode *head = nullptr, *tail = nullptr;
int add1 = 0, add2 = 0;
int carry = 0;
while(a1 || a2){
if(a1) add1 = a1->val;
else add1 = 0;
if(a2) add2 = a2->val;
else add2 = 0;
int sum = add1 + add2 + carry;
if(!head){
head = new ListNode(sum % 10);
tail = head;
}else{
tail->next = new ListNode(sum % 10);
tail = tail->next;
}
carry = sum / 10;
if(a1) a1 = a1->next;
if(a2) a2 = a2->next;
}
if(carry) tail->next = new ListNode(carry);
return head;
}
};