LeetCode 第二题两数相加 C语言

 

LeetCode 第二题两数相加 C语言

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) 
{
    int Sum = 0,Carry = 0;
    struct ListNode *PL1 = l1,*PL2 = l2;
    struct ListNode *NewHead,*P1,*P2;
    int Tem1 = l1->val,Tem2 = l2->val;
    
    NewHead = (struct ListNode *)malloc(sizeof (struct ListNode));
    
    P1= NewHead;
    
    P2 = P1;
    
    while((PL1 != NULL) || (PL2 != NULL) || Carry != 0)
    {
        Sum = Tem1 + Tem2 + Carry;
        
        if(Sum >= 10)
            Carry = 1;
        else 
            Carry = 0;
        
        P2->val = Sum % 10;
        
        P1 = (struct ListNode *)malloc(sizeof (struct ListNode));
        
        P2->next = P1;
        
        P2 = P1;
        
        if(PL1 == NULL)
        {           
            Tem1 = 0;
            
        }
        else
        {
            
            PL1 = PL1->next;
            
            if(PL1 != NULL)
                Tem1 = PL1->val;
            else 
                Tem1 = 0;
            
        }
        if(PL2 == NULL)
        {
            
            Tem2 = 0;
            
        }
        else
        {
            PL2 = PL2->next;
            
            if(PL2 != NULL)
                Tem2 = PL2->val;
            else 
                Tem2 = 0;
            
        }
    }
    
    P1->next = NULL;
    
    P1= NewHead;
    
    while(P1->next->next != NULL)
    {
        
        P1 = P1->next;
        
    }
        
    P2 = P1->next;
    
    free(P2);
    
    P1->next = P1->next->next;
        
    return NewHead;
    
}