Categorías
Algorithms

Leetcode – Agregar dos números (Java)

Se le dan dos listas enlazadas que representan dos números no negativos. Los dígitos se almacenan en orden inverso y cada uno de sus nodos contiene un solo dígito. Agregue los dos números y devuélvalo como una lista vinculada.

Entrada: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Salida: 7 -> 0 -> 8

Solución Java

/*
2 -> 4 -> 3
5 -> 6 -> 4
7    0    8
*/
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode fake = new ListNode(0);
    ListNode p = fake;
 
    ListNode p1 = l1;
    ListNode p2 = l2;
 
    int carry = 0;
    while(p1!=null || p2!=null){
        int sum = carry;
        if(p1!=null){
            sum += p1.val;
            p1 = p1.next;
        }
 
        if(p2!=null){
            sum += p2.val;
            p2 = p2.next;
        }
 
        if(sum>9){
            carry=1;
            sum = sum-10;
        }else{
            carry = 0;
        }
 
        ListNode l = new ListNode(sum);
        p.next = l;
        p = p.next;
    }
 
    //don't forget check the carry value at the end
    if(carry > 0){
        ListNode l = new ListNode(carry);
        p.next = l;
    }
    return fake.next;
}

¿Qué pasa si los dígitos se almacenan en orden regular en lugar de en orden inverso?

Respuesta: Podemos simplemente invertir la lista, calcular el resultado y revertir el resultado.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *