[Leetcode] 0143. Lista de reordenes

Explore diversas soluciones LeetCode en Python, C++, JavaScript, SQL y TypeScript. Ideal para preparación de entrevistas, aprendizaje y práctica de código en múltiples lenguajes de programación. Enlace de repositorio de Github

Tabla de contenido

Medio


Se le proporciona el encabezado de una lista enlazada individualmente. La lista se puede representar como:

l0 → L1 → … → Ln-1 → Lnorte

Reordene la lista para que esté en el siguiente formulario:

l0 → Lnorte → L1 → Ln-1 → L2 → Ln-2 →…

No puede modificar los valores en los nodos de la lista. Solo se pueden cambiar los nodos en sí.

 

Ejemplo 1:

Aporte: cabeza = [1,2,3,4]
Producción: [1,4,2,3]

Ejemplo 2:

Aporte: cabeza = [1,2,3,4,5]
Producción: [1,5,2,4,3]

 

Restricciones:

  • El número de nodos en la lista está en el rango [1, 5 * 10 4 ].
  • 1 <= Valor.nodo <= 1000

Pitón

				
					Complejidad de tiempo de #: O(n) Complejidad de espacio de #: O(1) al escribir import Clase opcional ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solución: def reorderList(self, head: Opcional[ListNode]) -> Ninguno: si no head: return fast = head slow = head mientras es rápido y fast.next: fast = fast.next.next slow = slow.next prev = Ninguno curr = lento mientras curr: curr.siguiente, anterior, curr = anterior, curr, curr.siguiente primero = cabeza segundo = anterior mientras segundo.siguiente: primero.siguiente, primero = segundo, primero.siguiente segundo.siguiente, segundo = primero, segundo.siguiente retorno raíz = ListNode(1) raíz.siguiente = ListaNodo(2) raíz.siguiente.siguiente = ListaNodo(3) raíz.siguiente.siguiente.siguiente = ListaNodo(4) raíz.siguiente.siguiente.siguiente.siguiente = ListNode(5) root.next.next.next.next.next = ListNode(6) print(Solución().reorderList(raíz))
				
			
es_ESEspañol