【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;
} 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章