My C Solution beats 88%

• /**

• struct ListNode {

• ``````int val;
``````
• ``````struct ListNode *next;
``````
• };
/
struct ListNode
addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
if(!l1 && l2) return l2;
if(!l2 && l1) return l1;
if(!l1 && !l2) return NULL;

struct ListNode *p1,*p2,*nl,*m,p;;
int flag=0;
p1=l1;
p2=l2;
nl=(struct ListNode
)malloc(sizeof(struct ListNode));
nl->next=NULL;
p=nl;

``````while(p1 && p2)
{
if(flag==0)
{
p1->val=p1->val+p2->val;
if(p1->val>=10)
{
p1->val=p1->val-10;
flag=1;
}
else flag=0;

}

else if(flag==1)
{
p1->val=p1->val+p2->val+1;
if(p1->val>=10)
{
p1->val=p1->val-10;
flag=1;
}
else flag=0;
}

nl->next=p1;
nl=nl->next;
p1=p1->next;
p2=p2->next;
}

if(!p1 && !p2)
{
if(flag==1)
{
m=(struct ListNode*)malloc(sizeof(struct ListNode));
m->val=1;
nl->next=m;
m->next=NULL;
}
else
{
nl->next=NULL;
}
}

if(!p1 && p2)
{
if(flag==0)
nl->next=p2;

else if(flag==1)
{
nl->next=p2;
p2->val=p2->val+1;
if(p2->val<10)
return p->next;
else
{
p2->val=p2->val-10;
flag=1;
while(p2->next && flag==1)
{
p2=p2->next;
p2->val=p2->val+1;
if(p2->val<10) return p->next;
else
{
p2->val=p2->val-10;
flag=1;
}
}

if(!p2->next && flag!=0)
{
m=(struct ListNode*)malloc(sizeof(struct ListNode));
m->val=1;
m->next=NULL;
p2->next=m;
}
}

}
}

if(!p2 && p1)
{
if(flag==0)
nl->next=p1;

else if(flag==1)
{
nl->next=p1;
p1->val=p1->val+1;
if(p1->val<10)
return p->next;
else
{
p1->val=p1->val-10;
flag=1;
while(p1->next && flag==1)
{
p1=p1->next;
p1->val=p1->val+1;
if(p1->val<10) return p->next;
else
{
p1->val=p1->val-10;
flag=1;
}
}

if(!p1->next && flag!=0)
{
m=(struct ListNode*)malloc(sizeof(struct ListNode));
m->val=1;
m->next=NULL;
p1->next=m;
}
}

}
}

return p->next;
``````

}

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.