Leetcode Español Java | Python | PHP | C++ | JavaScript
Introducción
En este artículo, aprenderás a Sumar dos listas enlazadas con acarreo. Este es un problema de programación común que se puede encontrar en entrevistas de trabajo, como las de Facebook.
En este artículo, cubriremos los siguientes temas:
✅ Una explicación del problema
✅ Una solución eficiente
✅ Implementaciones en Java, Python, PHP, C++ y JavaScript
Problema
Dadas dos listas enlazadas, genere una tercera que tenga la suma de los elementos nodo a nodo, y que el elemento sobrante o acarreo lo sume al siguiente nodo.
Pasos para realizar el ejercicio:
1.- Crear un puntero head3.
2.- Declaramos acarreo en cero.
3.- Recorremos ambas listas, mientras alguna no sea null.
4.- Declaramos suma con el valor de acarreo.
5.- Si existe alguno de los 2 punteros, lo sumamos a suma y lo movemos a la siguiente posición de la lista.
6.- El acarreo lo dividimos entre diez.
7.- Insertamos el módulo diez de la suma resultante en la lista 3.
8.- Una vez que salimos del ciclo, verificamos si existe un acarreo, si es así, insertamos el valor en la lista.
9.- Retornamos la lista enlazada 3.
Código en Java
publicclassSolution {
public ListNode crearNodo(int val) {
ListNodenodo=newListNode(val);
return nodo;
}
public ListNode insercion(ListNode head, int val) {
ListNodenewListNode= crearNodo(val);
if (head == null) {
head = newListNode;
} else {
ListNodeactual= head;
while (actual.next != null) {
actual = actual.next;
}
actual.next = newListNode;
}
return head;
}
public ListNode addTwoNumbers(ListNode head1, ListNode head2) {
ListNodehead3=null;
intacarreo=0;
while (head1 != null || head2 != null) {
intsuma= acarreo;
if (head1 != null) {
suma += head1.val;
head1 = head1.next;
}
if (head2 != null) {
suma += head2.val;
head2 = head2.next;
}
acarreo = suma / 10;
head3 = insercion(head3, suma % 10);
}
if (acarreo > 0) {
head3 = insercion(head3, acarreo);
}
return head3;
}
}
var crearNodo = function (val) {
returnnewListNode(val);
}
var insercion= function(head, val) {
const newNode = crearNodo(val);
if (!head) {
head = newNode;
} else {
let current = head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
return head;
}
var addTwoNumbers = function(head1, head2) {
let head3 = null;
let carry = 0;
while (head1 || head2) {
let sum = carry;
if (head1) {
sum += head1.val;
head1 = head1.next;
}
if (head2) {
sum += head2.val;
head2 = head2.next;
}
carry = Math.floor(sum / 10);
head3 = insercion(head3, sum % 10);
}
if (carry > 0) {
head3 = insercion(head3, carry);
}
return head3;
};
Conclusión
En este artículo, aprendiste a Sumar dos listas enlazadas. Este es un problema de programación común que se puede encontrar en entrevistas de trabajo, como las de Facebook.