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.