其他分享
首页 > 其他分享> > LeetCode刷题记--第二题--C语言

LeetCode刷题记--第二题--C语言

作者:互联网

题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

解答:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *p=NULL,*q=l1,*r=l2;
    struct ListNode *head=NULL,*temp=NULL;
    p = (struct ListNode *)malloc(sizeof(struct ListNode));
    if(p == NULL)
        return NULL;
    p->next =NULL;
    p->val = -1;
    int sum=0;
    int up_flag=0,start_flag=0;//up_flag进位标志,start_flag头指针标志
    while(1)
    {
        if(q!=NULL && r!=NULL)
        {
            temp = (struct ListNode *)malloc(sizeof(struct ListNode));
            if(temp == NULL)
                return NULL;
            sum = q->val + r->val + up_flag;
            temp->val = sum % 10;
            temp->next = NULL;
            up_flag = sum / 10;
            p->next = temp;
            p = p->next;
            if(start_flag==0)
            {
                head = p;
                start_flag = 1;
            }
            q=q->next;
            r=r->next;
        }
        else if(q==NULL && r!=NULL)
        {
            if(up_flag==0)
            {
                if(start_flag==0)
                {
                    head = r;
                    break;
                }
                else
                {
                    p->next = r;
                    break;
                }
            }
            else
            {
                temp = (struct ListNode *)malloc(sizeof(struct ListNode));
                if(temp == NULL)
                    return NULL;
                sum = r->val + up_flag;
                temp->val = sum % 10;
                temp->next = NULL;
                up_flag = sum / 10;
                p->next = temp;
                p = p->next;
                r= r->next;
            }
                
        }
        else if(r==NULL && q!=NULL)
        {
            if(up_flag==0)
            {
                if(start_flag==0)
                {
                    head = q;
                    break;
                }
                else
                {
                    p->next = q;
                    break;
                } 
            }
            else
            {
                temp = (struct ListNode *)malloc(sizeof(struct ListNode));
                if(temp == NULL)
                    return NULL;
                sum = q->val + up_flag;
                temp->val = sum % 10;
                temp->next = NULL;
                up_flag = sum / 10;
                p->next = temp;
                p = p->next;
                q= q->next;
            }
            
        }
        else if(r==NULL && q==NULL)
        {
            if(up_flag==0)
                break;
            else
            {
                temp = (struct ListNode *)malloc(sizeof(struct ListNode));
                if(temp == NULL)
                    return NULL;
                sum = up_flag;
                temp->val = sum % 10;
                temp->next = NULL;
                up_flag = sum / 10;
                p->next = temp;
                p = p->next;
            }
        }
    }
    return head;
}

标签:ListNode,C语言,temp,next,flag,题记,NULL,LeetCode,struct
来源: https://blog.csdn.net/m0_37967533/article/details/88084854