/* 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; } };