#include <iostream>
using namespace std;
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) {}
};
ListNode* addTwoNumbers(ListNode* p, ListNode* q) {
ListNode* r;
int c = 0;
while(p != NULL || q != NULL)
{
c += (p == NULL ? 0 : p->val) + (q == NULL ? 0 : q->val);
r = new ListNode(c%10);
c /= 10;
r = r->next, p = (p == NULL ? NULL : p -> next),q = (q == NULL? NULL : q-> next);
}
if(c != 0)
r = new ListNode(c);
return r;
}
int main() {
ListNode * l1, * l2;
l1 = new ListNode(3);
l2 = new ListNode(5);
ListNode * l3 = addTwoNumbers(l1,l2);
cout<<l3->val;
return 0;
}