//C++
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
ListNode *head,*s,*r;
int t=0;
head=(ListNode*)malloc(sizeof(ListNode));
r=head;
while(l1!=NULL||l2!=NULL)
{
if(l1!=NULL&&l2!=NULL)
{
s=(ListNode*)malloc(sizeof(ListNode));
if(t==1)
{
l1->val++; t=0;
}
s->val=l1->val+l2->val;
if((s->val)>=10)
{
s->val=(s->val)-10;
t=1;
}
r->next=s;
r=s;
l1=l1->next;
l2=l2->next;
}
if(l1==NULL&&l2!=NULL)
{
s=(ListNode*)malloc(sizeof(ListNode));
if(t==1)
{
l2->val++; t=0;
}
s->val=l2->val;
if((s->val)>=10)
{
s->val=(s->val)-10;
t=1;
}
r->next=s;
r=s;
l2=l2->next;
}
if(l1!=NULL&&l2==NULL)
{
s=(ListNode*)malloc(sizeof(ListNode));
if(t==1)
{
l1->val++; t=0;
}
s->val=l1->val;
if((s->val)>=10)
{
s->val=(s->val)-10;
t=1;
}
r->next=s;
r=s;
l1=l1->next;
}
}
if(t==1)
{
s=(ListNode*)malloc(sizeof(ListNode));
s->val=1;
r->next=s;
r=s;
}
r->next=NULL;
head=head->next;
return head;
}
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode(0);
ListNode cur = pre;
int carry=0;
while(l1.next!=null&&l1.next!=null)
{
int x = l1 == null ? 0 : l1.val;
int y = l2 == null ? 0 : l2.val;
int sum=x+y+carry;
cur.next = new ListNode(sum);
cur = cur.next;
if(l1 != null)
l1 = l1.next;
if(l2 != null)
l2 = l2.next;
}
if(carry == 1) {
cur.next = new ListNode(carry);
}
return pre.next;
}