将两个链表看成倒序的十进制数,最左边为低位,最右边为高位,低位对齐,高位不足补0,用last指针的next代表进位项
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* result = new ListNode(-1);
ListNode* last = result;
last->next = new ListNode(0);
while (l1 != NULL || l2 != NULL) {
if (l1 == NULL) {
l1 = new ListNode(0);
}
if (l2 == NULL) {
l2 = new ListNode(0);
}
int data = l1->val + l2->val+last->next->val;
if (data>9){
if (result->val == -1) {
result = new ListNode(data - 10);
last = result;
last->next = new ListNode(1);
}
else{
ListNode* node = new ListNode(data - 10);
last->next = node;
last = last->next;
last->next = new ListNode(1);
}
}
else {
if (result->val == -1) {
result = new ListNode(data);
last = result;
last->next = new ListNode(0);
}
else {
ListNode* node = new ListNode(data);
last->next = node;
last = last->next;
last->next = new ListNode(0);
}
}
l1 = l1->next;
l2 = l2->next;
}
if (last->next->val==0){
last->next = NULL;
}
return result;
}