LeetCode-2 Add Two Numbers

LeetCode-2:
给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。

/*两数相加,单向链表,高位在链表尾端*/
struct ListNode
{
    int val;
    struct ListNode *next;
}ListNode;

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
    int flag=0;//进位标志
    int sum=0;
    struct ListNode *head=NULL;
    struct ListNode *p=NULL;
    struct ListNode *p_end=NULL;
    struct ListNode *p_L1=l1;
    struct ListNode *p_L2=l2;
    for(p_L1;p_L1!=NULL;p_L1=p_L1->next)
    {
        p=(struct ListNode*)malloc(sizeof(struct ListNode));
        if(head==NULL)
            head=p;
        if(p_end==NULL)
        {
            p_end=p;
            p_end->next=NULL;
        }
        else
            p_end->next=p;
        if(p_L2!=NULL)
        {
            sum=p_L1->val+p_L2->val+flag;
            p_L2=p_L2->next;
            p->val=sum%10;
            flag=sum/10;
            p_end=p;
        }
        else
        {
            sum=p_L1->val+flag;
            p->val=sum%10;
            flag=sum/10;
            p_end=p;
        }
    }
    for(p_L2;p_L2!=NULL;p_L2=p_L2->next)
    {
        p=(struct ListNode*)malloc(sizeof(struct ListNode));
        if(head==NULL)
            head=p;
        if(p_end==NULL)
        {
            p_end=p;
            p_end->next=NULL;
        }
        else
            p_end->next=p;
        sum=p_L2->val+flag;
        p->val=sum%10;
        flag=sum/10;
        p_end=p;
    }
    if(flag)
    {
        p=(struct ListNode*)malloc(sizeof(struct ListNode));
        p_end->next=p;
        p->val=flag;
        p_end=p;
    }
    p_end->next=NULL;
    return head;
}

猜你喜欢

转载自blog.csdn.net/q547569552/article/details/79868245
今日推荐