LeetCode 第二题两数相加 C语言

 

LeetCode 第二题两数相加 C语言_第1张图片

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) 
{
    struct ListNode* top;
    struct ListNode* toptop;
    struct ListNode* end;
    struct ListNode* pl1;
    struct ListNode* pl2;
    int flag = 0;//进位标志
    int add;//相加之和
    
    //顶部初始化
    top = (struct ListNode*)malloc(sizeof(struct ListNode));
    end = top;
    top->val = 0;
    top->next = NULL;
    //搜寻指针指向两链表头节点
    pl1 = l1;
    pl2 = l2;
    
    while(pl1 || pl2)
    {
        //l1达到末尾
        if(pl1==NULL)
        {
            add = pl2->val;
        }
        //l2达到末尾
        else if(pl2==NULL)
        {
            add = pl1->val;
        }
        //都没达到末尾
        else if(pl1 != NULL && pl2 != NULL) 
        {
             add = pl1->val + pl2->val;
        }
        if(flag == 1)
        {
            add += flag;
            flag = 0;
        }
        
       
        if(add >= 10)
        {
            flag = 1;
            add = add%10;
        }
        toptop = top;
        top = (struct ListNode*)malloc(sizeof(struct ListNode));
        toptop->next = top;
        top->val = add;
        top->next = NULL;
        toptop = top;
        if(pl1 != NULL)
        {
            pl1 = pl1->next;
        }
        if(pl2 != NULL)
        {
            pl2 = pl2->next;
        }
        if(pl1 != NULL && pl2 == NULL && flag == 0)
        {
            top->next = pl1;
             return end->next;
        }
        if(pl2 != NULL && pl1 == NULL && flag == 0)
        {
            top->next = pl2;
             return end->next;
        }
        
    }
    if(flag == 1)
    {
        toptop = top;
        top = (struct ListNode*)malloc(sizeof(struct ListNode));
        toptop->next = top;
        top->val = flag;
        top->next = NULL;
        toptop = top;
    }
    return end->next;
}

 

你可能感兴趣的:(LeetCode 第二题两数相加 C语言)