Se dan dos listas enlazadas no vacías que representan dos enteros no negativos. Los dígitos están almacenados en orden inverso, y cada uno de sus nodos contiene un solo dígito. Suma los dos números y devuelve la suma como una lista enlazada.
Puede suponer que los dos números no contienen ningún cero inicial, excepto el propio número 0.
classListNode: def __init__(self, val=0, next=None): self.val= val
self.next= next
classSolution: def sumarDosNumeros(self,nodo1:ListNode,nodo2:ListNode)->ListNode: cabezaTemporal =ListNode() apuntador1 = nodo1
apuntador2 = nodo2
nodoActual = cabezaTemporal
lleva =0while apuntador1 or apuntador2: x = apuntador1.valif apuntador1 else0 y = apuntador2.valif apuntador2 else0 current_sum = lleva + x + y
lleva = current_sum // 10 nodoActual.next=ListNode(current_sum %10) nodoActual = nodoActual.nextifapuntador1: apuntador1 = apuntador1.nextifapuntador2: apuntador2 = apuntador2.nextiflleva: nodoActual.next=ListNode(lleva)return cabezaTemporal.next
Intercambio de nodos por parejas
Dada una lista enlazada, intercambia cada dos nodos adyacentes y devuelve su cabeza. Debe resolver el problema sin modificar los valores de los nodos de la lista (es decir, sólo se pueden cambiar los propios nodos).
# Definitionfor singly-linked list.classListNode: def __init__(self, val=0, next=None): self.val= val
self.next= next
classSolution: def swapPairs(self,cabeza:ListNode)->ListNode: nodoActual = cabeza
if nodoActual ==None:returnNonewhile nodoActual !=None and nodoActual.next!=None:if nodoActual.val== nodoActual.next.val: nodoActual = nodoActual.next.nextelse: nodoActual.val, nodoActual.next.val= nodoActual.next.val, nodoActual.val nodoActual = nodoActual.next.nextreturn cabeza
Historial de un Navegador
Tienes un navegador de una pestaña donde empiezas en la página de inicio y puedes visitar otra url, retroceder en el historial número de pasos o avanzar en el historial número de pasos.
Implementa la clase BrowserHistory:
BrowserHistory(string homepage): inicializa el objeto con la página de inicio del navegador.
void visit(string url): visita la url de la página actual. Borra todo el historial de avance.
string back(int steps): mueve los pasos hacia atrás en el historial. Si sólo puede devolver x pasos en el historial y pasos > x, devolverá sólo x pasos. Devuelve la url actual después de retroceder como máximo pasos en el historial.
string forward(int steps): mover pasos hacia adelante en el historial. Si sólo puede avanzar x pasos en el historial y pasos > x, avanzará sólo x pasos. Devuelve la url actual después de avanzar en el historial como máximo pasos.
BrowserHistory browserHistory =newBrowserHistory("leetcode.com");browserHistory.visit("google.com");// Estás en "leetcode.com". Visita "google.com"browserHistory.visit("facebook.com");// Estás en "google.com". Visita "facebook.com"browserHistory.visit("youtube.com");// Estás en "facebook.com". Visita "youtube.com"browserHistory.back(1);// Estás en "youtube.com", vuelve a "facebook.com" retornas "facebook.com"browserHistory.back(1);// Estás en "facebook.com", vuelve a "google.com" retornas "google.com"browserHistory.forward(1);// Estás en "google.com", avanza hasta "facebook.com" return "facebook.com"browserHistory.visit("linkedin.com");// Estás en "facebook.com". Visita "linkedin.com"browserHistory.forward(2);// Estás en "linkedin.com", no puedes avanzar ningún paso.browserHistory.back(2);// Estás en "linkedin.com", retrocede dos pasos a "facebook.com" y luego a "google.com". devuelve "google.com"browserHistory.back(7);// Estás en "google.com", puedes retroceder sólo un paso hasta "leetcode.com". Retornas "leetcode.com"
En el último ejercicio hice un método que permite imprimir los elementos del historial resaltando la página actual:
Se ve algo así cuando se ejecuta:
El último ejercicio creo que no iría dentro de los ejercicios. 🫠🤓 pero tremendo!
.
Qué bueno que subió las respuestas en python.
La solución del segundo ejercicio modifica los valores de los nodos, pero no los apuntadores, sirve, pero no cumpliría totalmente la solución al ejercicio.