LeetCode T2

 

 

 

 

 

 使用依次相加,记录进位的方式进行运算,下面是我的解答,leetcode上运行耗时20ms,内存占用7.3MB

struct ListNode{
    int val;
    struct ListNode *next;
};
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode *p1,*p2;
    p1=l1;p2=l2;
    struct ListNode *head=(struct ListNode *)malloc(sizeof(struct ListNode));
    head->next=NULL;
    struct ListNode *q=head;
    int flag_pre=0,flag_this=0;//用来记录进位
    while(p1 || p2){
        int tmp=0;
        if(p1==NULL && p2) tmp=p2->val+flag_pre;
        else if(p2==NULL && p1) tmp=p1->val+flag_pre;
        else tmp=p1->val+p2->val+flag_pre;
        flag_pre=0;
        if(tmp>=10){
            flag_this=1;
            flag_pre=1;
        };
        struct ListNode *tail=(struct ListNode *)malloc(sizeof(struct ListNode));
        tail->val=tmp-flag_this*10;
        flag_this=0;
        tail->next=NULL;
        q->next=tail;
        q=q->next;
        if(p1) p1=p1->next;
        if(p2) p2=p2->next;
    }
    if(!(p1&&p2) && flag_pre==1){
        struct ListNode *tail=(struct ListNode *)malloc(sizeof(struct ListNode));
        tail->val=1;
        tail->next=NULL;
        q->next=tail;
        q=q->next;
    }
    return head->next;
}

 

posted @ 2020-04-27 14:44  runsdeep  阅读(251)  评论(0编辑  收藏  举报