My C Solution beats 88%


  • 0
    K

    /**

    • Definition for singly-linked list.

    • 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;
    

    }


Log in to reply
 

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