Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
5.6 kB
3
Indexable
Never
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode *getnode()
{
    struct ListNode *newnode;
    newnode=(struct ListNode *)malloc(sizeof(struct ListNode));
    newnode->val=0;
    newnode->next=NULL;
    
    return newnode;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *temp1,*temp2,*temp3,*l3=NULL;
    int v1,v2,v3,n1=0,n2=0,n3=0,carry=0;
    
    
    while(l1!=NULL && l2!=NULL)
    {
        temp1=getnode();
        v1=(l1->val);
        v2=(l2->val);
        if(carry==1)
        {
            v3=v1+v2+carry;
            carry=0;
        }
        else
        v3=v1+v2;
            
        if(v3>9)
        {
          v3=v3-10;
         (temp1->val)=(v3);
         if((l1->next)||(l2->next))
        {
            if(l1->next)
            {
                l1=l1->next;
                n1=(l1->val);
                
            }
            if(l2->next)
            { 
                l2=l2->next;
                n2=(l2->val);
                
            }
            n3=n1+n2+1;
             n1=0;
             n2=0;
             temp3=getnode();
             
             //temp1->next=temp3;
             
             if(n3>9)
             {
                 n3=n3-10;
                 (temp3->val)=n3;
                 carry=1;
             }
             else
             temp3->val=n3;
             
              temp1->next=temp3;
             
            
          }
         else
         {
             temp3=getnode();
             temp3->val=1;
             temp1->next=temp3;
            // temp1->next=getnode();
            // temp1=temp1->next;
            // temp1->val=1;
         }
         
        }
        else
        {
            temp1->val=v3;
        }
        
        
        
         if(l3==NULL)
         {
             l3=temp1;
         }
         else
         {
             temp2=l3;
             while(temp2->next!=NULL)
             {
               temp2=temp2->next;
             }
             temp2->next=temp1;

         }
        l1=l1->next;
        l2=l2->next;
        //free(temp1);
        //temp1=temp1->next;
        }
    
    while(l1!=NULL || carry==1)
    {
     
        temp1=getnode();
        if(l1)
        v1=(l1->val);
        else
        {
            v1=0;
            break;
        }
        if(carry==1)
        {
            v1=v1+1;
            carry=0;
        }
        if(v1>9)
        {
            temp1->val=v1-10;
            if(l1->next)
            {
                l1=l1->next;
                n1=(l1->val);
                n1=n1+1;
                temp3=getnode();
                if(n1>9)
                {
                    n1=n1-10;
                    temp3->val=n1;
                    carry=1;
                    
                }
               else
               {
                   temp3->val=n1;
               }
                 
                temp1->next=temp3;

                
            }
            else
            {
                temp3=getnode();
                temp3->val=1;
                temp1->next=temp3;
            // temp1->next=getnode();
            // temp1=temp1->next;
            // temp1->val=1;
            }
            
        }
        else
            temp1->val=v1;
        
        
              if(l3==NULL)
         {
             l3=temp1;
         }
         else
         {
             temp2=l3;
             while(temp2->next!=NULL)
             {
               temp2=temp2->next;
             }
             temp2->next=temp1;

         }
        if(l1!=NULL)
        l1=l1->next;
       // temp1=temp1->next;
            
                
            
        }
     while(l2!=NULL || carry==1)
    {
     
        temp1=getnode();
         if(l2)
        v1=(l2->val);
         else
         {
           v1=0;
             
         }
             
        if(carry==1)
        {
            v1=v1+1;
            carry=0;
        }
        if(v1>9)
        {
            temp1->val=v1-10;
            if(l2->next)
            {
                l2=l2->next;
                n1=(l2->val);
                n1=n1+1;
                temp3=getnode();
                if(n1>9)
                {
                    n1=n1-10;
                    temp3->val=n1;
                    carry=1;
                    
                }
               else
               {
                   temp3->val=n1;
               }
                 
                temp1->next=temp3;
                
            }
            else
            {
                temp3=getnode();
                temp3->val=1;
                temp1->next=temp3;
            // temp1->next=getnode();
             //temp1=temp1->next;
           //  temp1->val=1;
            }
            
        }
         
         else
             temp1->val=v1;
         
         
              if(l3==NULL)
         {
             l3=temp1;
         }
         else
         {
             temp2=l3;
             while(temp2->next!=NULL)
             {
               temp2=temp2->next;
             }
             temp2->next=temp1;

         }
         if(l2!=NULL)
        l2=l2->next;
        //temp1=temp1->next;
    }
    
    return l3;
    
    
    
}