Introducción

1

¿Ya tomaste el Curso Avanzado de Algoritmos: Patrones de Arrays y Strings?

Lista Enlazada

2

Estructura de datos: Lista Enlazada

3

Programando listas enlazadas con Java

4

Cómo Invertir una Lista Enlazada

5

Odd Even Linked List: análisis del problema

6

Solución de Odd Even Linked List

7

Playground: Odd Even Liked List

8

Programando Odd Even Linked List con C++

9

Linked List Cycle: análisis del problema

10

Solución de Linked List Cycle

11

Playground: Linked List Cycle

12

Programando Linked List Cycle con Python

13

Palindrome Linked List: análisis del problema

14

Solución de Palindrome Linked List

15

Playground: Palindrome Linked List

16

Programando Palindrome Linked List con Java

17

Reorder List: análisis del problema

18

Solución de Reorder List

19

Programando Reorder List con JavaScript

20

Playground: Reorder List Without Repeated Values

21

Reto: LRU Caché

22

Ejercicios recomendados de Lista Enlazada

23

Ejercicios resueltos de Lista Enlazada

Pilas y colas

24

Estructura de datos: Pilas y Colas

25

Paréntesis Válido: análisis del problema

26

Solución de Paréntesis Válido

27

Playground: Paréntesis Válido

28

Programando Paréntesis Válido con C++

29

Ejercicios recomendados de Pilas

Colas de prioridad

30

Estructura de datos: Colas de Prioridad

31

K Closest Points to Origin: análisis del problema

32

Solución de K Closest Points to Origin

33

Playground: K Closest Points to Origin

34

Programando K Closest Points to Origin con Python

35

Reorganize String: análisis del problema

36

Solución de Reorganize String

37

Playground: Reorganize String

38

Programando Reorganize String con Python

39

Ejercicios recomendados de Colas de prioridad

40

Ejercicios resueltos de Colas de prioridad

Próximos pasos

41

Toma el Curso Avanzado de Algoritmos: Grafos y Árboles

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

11 Días
23 Hrs
15 Min
12 Seg

Programando Linked List Cycle con Python

12/41
Recursos

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

En el código de la profe solo hay un error en la línea 6 donde se indica el tipo de dato ya que es de tipo "Nodo" debido que la función recibe como parámetro el primer nodo de la lista. Y además como la función está fuera de la clase, no se debe incluir el parámetro "self": ![](https://static.platzi.com/media/user_upload/imagen-17c0485a-5829-4da1-83f1-f64d676c8705.jpg)
esta es mi solución en java: ```java public boolean hasCycle (Nodo cabeza){ boolean boolHasCycle = true; //voy a asumir que cada nodo tiene un único valor //entonces al comparar si ya se pasó por ese nodo compararé los valores que tienen dentro if(cabeza == null || cabeza.siguiente == null){ return false; } Nodo apuntadorRapido = cabeza; Nodo apuntadorLento = cabeza; while (boolHasCycle) { if (apuntadorLento.siguiente != null){ apuntadorLento = apuntadorLento.siguiente; } //este lo hago por si algo, pero en mi mente va a llegar siempre el rápido primero a null, en caso de existir un final else { boolHasCycle = false; } if (apuntadorRapido.siguiente != null) { if(apuntadorRapido.siguiente.siguiente != null){ apuntadorRapido = apuntadorRapido.siguiente.siguiente; } else { boolHasCycle = false; } } else { boolHasCycle = false; } if(apuntadorRapido.valor == apuntadorLento.valor){ break; } } return boolHasCycle; } ```
En TypeScript: ```js /** * Definition for singly-linked list. * class ListNode { * val: number * next: ListNode | null * constructor(val?: number, next?: ListNode | null) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } * } */ function hasCycle(head: ListNode | null): boolean { if (head == null) { return false } let p1 = head; let p2 = head.next; // Fast pointer while (p1 != p2) { if (!p2 || !p2.next) { return false; } p1 = p1.next; p2 = p2.next.next; } return true; }; ```/\*\* \* Definition for singly-linked list. \* class ListNode { \* val: number \* next: ListNode | null \* constructor(val?: number, next?: ListNode | null) { \* this.val = (val===undefined ? 0 : val) \* this.next = (next===undefined ? null : next) \* } \* } \*/ function hasCycle(head: ListNode | null): boolean { if (head == null) { return false } let p1 = head; let p2 = head.next; // Fast pointer while (p1 != p2) { if (!p2 || !p2.next) { return false; } p1 = p1.next; p2 = p2.next.next; } return true; };

Lo había pensado como en la segundo versión de la profe pero agregue en el if que si lento estaba después de rápido arrojara true. Dejo mi ejecución en c++

template<class T> bool Lista<T>::hasCycle(){
    Nodo<T> *rapido=inicio;
    Nodo<T> *lento=inicio;

    if (inicio== nullptr){
        throw 404;
    }

    if (inicio->getSiguiente()== nullptr){
        return false;
    }

    while (rapido->getSiguiente()!= nullptr || rapido== nullptr){

        if (rapido->getSiguiente()==lento || rapido==lento){
            //hay algun ciclo
            return true;
        }

        lento=lento->getSiguiente();
        rapido=rapido->getSiguiente()->getSiguiente();
    }

    return false;
}

Me da curiosidad que dijo que lento y rápido iniciaban en el mismo, pero en la implementación no, aun así, ayudo bastante afianzar Linked List.