1. 链表求和
反向求和,比较简单,从左到右扫描就可以
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *sum = new ListNode(0);
ListNode *cur = sum;
bool add_one = false;
if(l1 == nullptr && l2 == nullptr)
return sum;
if(l1 != nullptr && l2 == nullptr)
return l1;
if(l1 == nullptr && l2 != nullptr)
return l2;
while(l1 != nullptr || l2 != nullptr){
if(add_one)
cur -> next = new ListNode(1);
else
cur -> next = new ListNode(0);
cur = cur -> next;
if(l1 != nullptr){
cur -> val += l1 -> val;
l1 = l1 -> next;
}
if(l2 != nullptr){
cur -> val += l2 -> val;
l2 = l2 -> next;
}
if(cur -> val > 9){
cur -> val %= 10;
add_one = true;
}
else add_one = false;
}
if(add_one)
cur -> next = new ListNode(1);
return sum -> next;
}
};