ブラッシングの質問を記録する-(leetcode-2つの数字を追加)

質問:2つの非負の整数を表すために、2つの空でないリンクリストを指定します。その中で、それぞれの桁は逆の順序で格納され、各ノードは1桁しか格納できません。
これらの2つの数値を合計すると、それらの合計を表す新しいリンクリストが返されます。
番号0を除いて、これらの番号はいずれも0で始まらないと想定できます。
例:
入力:(2-> 4-> 3)+(5-> 6-> 4)
出力:7-> 0-> 8
理由:342 + 465 = 807
ソース:LeetCode
リンク:https:/の
著作権/leetcode-cn.com/problems/add-two-numbersはLeetcode.comが所有しています商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。

コード:

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


struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    
    
    struct ListNode *p,*p1,*p2,*p3,*p4,*ppp,*pppp;
    p3=l1;
    p4=l2;
    int flag=0,i=0,j=0;
    while(p3!=NULL){
    
    
        i++;
        p3=p3->next;
    }
    while(p4!=NULL){
    
    
        j++;
        p4=p4->next;
    }
    if(i==j||i>j){
    
    
        p=l1;
        p1=ppp=l1;
        p2=pppp=l2;
    }
    if(i<j){
    
    
        p=l2;
        p2=ppp=l2;
        p1=pppp=l1;
    }
    while(ppp!=NULL&&pppp!=NULL){
    
    
        if((ppp->val+pppp->val+flag)/10>0){
    
    
            int k=ppp->val;
            ppp->val=(ppp->val+pppp->val+flag)%10;
            flag=(k+pppp->val+flag)/10;
            if(i==j||i>j){
    
    
            p1=ppp;
            p2=pppp;
            }
            if(i<j){
    
    
            p2=ppp;
            p1=pppp;
            }
            ppp=ppp->next;
            pppp=pppp->next;
        }else{
    
    
            ppp->val=ppp->val+pppp->val+flag;
            if(i==j||i>j){
    
    
            p1=ppp;
            p2=pppp;
            }
            if(i<j){
    
    
            p2=ppp;
            p1=pppp;
            }
            ppp=ppp->next;
            pppp=pppp->next;
            flag=0;
        }
    }
    if(ppp!=NULL&&flag!=0){
    
    
        while(ppp!=NULL){
    
    
            if((ppp->val+flag)/10){
    
    
                flag=(ppp->val+flag)/10;
                ppp->val=(ppp->val+flag)%10;
                if(i==j||i>j){
    
    
                p1=ppp;
                p2=pppp;
                }
                if(i<j){
    
    
                p2=ppp;
                p1=pppp;
                }
                ppp=ppp->next;
            }else{
    
    
                ppp->val=ppp->val+flag;
                flag=0;
                if(i==j||i>j){
    
    
                p1=ppp;
                p2=pppp;
                }
                if(i<j){
    
    
                p2=ppp;
                p1=pppp;
                }
                ppp=ppp->next;
            }
        }
    }
    if(ppp==NULL&&pppp==NULL&&flag!=0){
    
    
        struct ListNode* pp = (struct ListNode*)malloc(sizeof(struct ListNode));
        pp->val=flag;
        pp->next=NULL;
        if(i==j||i>j)
        p1->next=pp;
        if(i<j)
        p2->next=pp;
    }
    return p;

}

ここに画像の説明を挿入エラーがあれば訂正してください、ありがとうございます!

おすすめ

転載: blog.csdn.net/lthahaha/article/details/106332610