//Definition for singly-linked list.
#include <stdio.h>
#include <malloc.h>
#include <ctype.h>
struct ListNode {
int val;
struct ListNode *next;
};
void addNode(struct ListNode **head, struct ListNode **p, int val)
{
if (*head == NULL)
{
*head = (struct ListNode*)malloc(sizeof(struct ListNode));
(*head)->val = val;
(*head)->next = NULL;
*p = *head;
}
else
{
struct ListNode *tmp = (struct ListNode*)malloc(sizeof(struct ListNode));
tmp->val = val;
tmp->next = NULL;
(*p)->next = tmp;
(*p) = (*p)->next;
}
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p1 = l1, *p2 = l2, *p = NULL, *head = NULL;
int a = 0, b = 0, c = 0;
for (; p1 != NULL && p2 != NULL; p1 = p1->next, p2 = p2->next)
{
c = p1->val + p2->val + a;
b = c % 10;
a = c / 10;
addNode(&head, &p, b);
}
p1 = (p1 == NULL ? p2 : p1);
for (; p1 != NULL; p1 = p1->next)
{
c = p1->val + a;
b = c % 10;
a = c / 10;
addNode(&head, &p, b);
}
for (; a > 0; a /= 10)
{
addNode(&head, &p, a);
}
return head;
}
struct ListNode *Input(const char *str)
{
struct ListNode *p = NULL, *head = NULL;
const char *c = str;
for (; *c != '\0'; c++)
{
if (isdigit(*c))
{
if (p == NULL)
{
head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->val = *c - '0';
head->next = NULL;
p = head;
}
else
{
struct ListNode *tmp = (struct ListNode*)malloc(sizeof(struct ListNode));
tmp->next = NULL;
tmp->val = *c - '0';
p->next = tmp;
p = p->next;
}
}
}
return head;
}
void dump(struct ListNode *head)
{
printf("[");
for (; head != NULL; head = head->next)
{
printf("%d", head->val);
if (head->next != NULL)
{
printf(",");
}
}
printf("]\n");
}
int main()
{
struct ListNode *l1 = NULL, *l2 = NULL, *head = NULL;
static char tmp[100];
scanf("%s", tmp);
l1 = Input(tmp);
scanf("%s", tmp);
l2 = Input(tmp);
dump(l1);
dump(l2);
head = addTwoNumbers(l1, l2);
dump(head);
scanf("%s", tmp);
return 0;
}