Registre las preguntas sobre el cepillado —— (código de lectura —— 2 sume dos números)

Pregunta: Proporcione dos listas vinculadas no vacías para representar dos números enteros no negativos. Entre ellos, sus respectivos dígitos se almacenan en orden inverso, y cada nodo solo puede almacenar un dígito.
Si sumamos estos dos números, se devolverá una nueva lista vinculada para representar su suma.
Puede suponer que ninguno de estos números comienza con 0, excepto el número 0.
Ejemplo:
Entrada: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Salida: 7 -> 0 -> 8
Razón: 342 + 465 = 807
Fuente: LeetCode
Enlace: https: Los
derechos de autor de / /leetcode-cn.com/problems/add-two-numbers es propiedad de Leetcode.com . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Código:

/**
 * 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;

}

Inserte la descripción de la imagen aquíPor favor corríjame si hay algún error, ¡gracias! ! !

Supongo que te gusta

Origin blog.csdn.net/lthahaha/article/details/106332610
Recomendado
Clasificación