```
int initList(struct ListNode **L) {
*L = (struct ListNode *) malloc(sizeof(struct ListNode));
if(!*L) {
printf("error\n");
exit(0);
}
(*L)->next = NULL;
return 1;
}
int push(struct ListNode *L, int pos, int e) {
int i = 0;
struct ListNode *q, *t;
t = L;
while(t && i < pos) {
t = t->next;
i++;
}
q = (struct ListNode *) malloc(sizeof(struct ListNode));
if(!q) {
printf("error\n");
exit(0);
}
q->val = e;
q->next = t->next;
t->next = q;
return 1;
}
int destory(struct ListNode **L) {
struct ListNode *t;
while(*L) {
t=(*L)->next;
free(*L);
*L=t;
}
return 1;
}
int traverse(struct ListNode *L) {
struct ListNode *t = L->next;
while(t) {
printf("%d ",t->val);
t = t->next;
}
printf("\n");
return 1;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
int i = 0;
int total, increment = 0;
struct ListNode *NewList;
initList(&NewList);
while(l1->next || l2->next || increment) {
total = 0;
if(l1->next) {
total += l1->next->val;
l1 = l1->next;
}
if(l2->next) {
total += l2->next->val;
l2 = l2->next;
}
total += increment;
increment = total/10;
push(NewList, i, total%10);
i++;
}
return NewList;
}
```

input: [0],[1]

output: [0]

It's output [1] in my computer, Can someone help me? thanks!