Puerro 2. Sumar dos números

Se le dan dos  listas enlazadas no vacías  que representan dos enteros no negativos. Cada uno de sus dígitos se   almacena  en orden inverso , y cada nodo solo puede almacenar un  dígito.

Agregue dos números y devuelva una lista vinculada que represente la suma en el mismo formulario.

Puedes suponer que ningún número comienza con un cero que no sea el número cero.

Ejemplo 1:

Entrada: l1 = [2,4,3], l2 = [5,6,4]
 Salida: [7,0,8]
 Explicación: 342 + 465 = 807.

Ejemplo 2:

Entrada: l1 = [0], l2 = [0]
 Salida: [0]

Ejemplo 3:

Entrada: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
 Salida: [8,9,9,9,0,0,0,1]

pista:

  • El número de nodos en cada lista enlazada está en el  [1, 100] rango
  • 0 <= Node.val <= 9
  • Los datos del título garantizan que el número representado por la lista no contiene ceros a la izquierda.

 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *p1 = nullptr;
        ListNode *p2 = nullptr;
        int jinwei = 0;
        int sum = 0;
        while(l1||l2){
            int n1 = l1?l1->val:0;
            int n2 = l2?l2->val:0;
            sum = n1 + n2 + jinwei;
            if(!p1){
                p1 = p2 = new ListNode( sum % 10);
            }else{
                p2->next = new ListNode(sum % 10);
                p2 = p2->next;
            }
            jinwei = sum /10;
            if(l1)
                l1 = l1->next;
            if(l2)
                l2 = l2->next;
            
        }
        if (jinwei > 0) {
            p2->next = new ListNode(jinwei);
        }
        return p1;
    }
};

Supongo que te gusta

Origin blog.csdn.net/Recursions/article/details/128506484
Recomendado
Clasificación