/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Plus {
public:
ListNode* plusAB(ListNode* a, ListNode* b) {
// write code here
if (!a ) return b;
if (!b) return a;
auto* sum = new ListNode{0};
ListNode* sptr = sum;
bool over_flag = false;
auto pa=a;
auto pb=b;
while (pa || pb) {
int tmp_a = pa ? pa->val : 0;
int tmp_b = pb ? pb->val : 0;
int tmp = tmp_a + tmp_b + static_cast<int>(over_flag);
over_flag = tmp > 9;
auto s = new ListNode(tmp % 10);
sptr->next = s;
sptr = sptr->next;
if(pa)pa = pa->next;
if(pb)pb = pb->next;
}
if(over_flag){
sptr->next = new ListNode(1);
}
return sum->next;
}
};