【LeetCode】2. Add Two Numbers C语言

LeetCode解题小结:

原题:给定两个非空的链表,表示两个非负整数。 数字以相反的顺序存储,每个节点包含一个数字。 两个数字相加,并将结果作为链表返回。

注意:

两个数字是反向存储相加的例如:342+465=807。

                    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
                    Output: 7 -> 0 -> 8

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    
    struct ListNode *p1=l1;
    struct ListNode *p2=l2;
    struct ListNode *result=(struct ListNode *)malloc(sizeof(struct ListNode));
    result->val=0;

    struct ListNode *p=NULL;
    int c=0;
    while (p1!=NULL || p2!=NULL || c!=0)
    {
        if(p == NULL)
        {
            p=result;
        }
        else
        {
            p->next=(struct ListNode*)malloc(sizeof(struct ListNode)); //这里写成p会出错
            p->next->val=0;
            p=p->next;
        }
        int a=(p1==NULL ? 0:p1->val);
        int b=(p2==NULL ? 0:p2->val);
        int s=(a+b+c)%10;
        c=(a+b+c)/10;
        p->val=s;     
        p->next=NULL;
   
        p1=(p1==NULL ? NULL : p1->next);
        p2=(p2==NULL ? NULL : p2->next);

    }
    return result;
} 


你可能感兴趣的:(数据结构-链表)