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 Prácticos con Listas Enlazadas y Historial de Navegador

23

Operaciones con Listas Enlazadas: Suma, Intercambio y Navegador

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

Comparación de Cadenas con Backspaces

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

Colas de Prioridad: Ejercicios Prácticos y Soluciones

40

Colas de Prioridad y Gestión de Eventos

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

Programando Odd Even Linked List con C++

8/41
Recursos

Aportes 12

Preguntas 1

Ordenar por:

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

Aqui esta una implementación en JavaScript: Odd Even LinkedList en JavaScript

Comparto código de la profe en python:

Pruebas:

No vi Bug.

La profe tiene un error en la línea 15 porque colocó un punto en lugar de la fecha en la parte de “par**.**siguiente != nullptr”

My solution!! ![](https://static.platzi.com/media/user_upload/image-a438b631-10f1-45b5-9727-4f891293ab61.jpg)
No me gusta la idea de asumir, dado este ejemplo, que el primero es impar y el segundo es par, para un caso en que la lista empiece por ej: 2,2,3,5 tanto el nodo par como impar ambas serían pares.
El código debería estar escrito así: ``` struct ListNode { int valor; ListNode \*siguiente; ListNode() : valor(0), siguiente(nullptr) {} ListNode(int x) : valor(x), siguiente(nullptr) {} ListNode(int x, ListNode \*siguiente) : valor(x), siguiente(siguiente) {}}; ListNode\* oddEvenList(ListNode\* cabeza) { if (cabeza == nullptr || cabeza->siguiente == nullptr) { return cabeza; } ListNode\* impar = cabeza; ListNode\* par = cabeza->siguiente; ListNode\* cabezaPar = par; while (par != nullptr && par->siguiente != nullptr) { impar->siguiente = par->siguiente; impar = impar->siguiente; par->siguiente = impar->siguiente; par = par->siguiente; } impar->siguiente = cabezaPar; return cabeza; } ```
```python def oddeven(self): counter = 0 current = self.head even_head = None even_tail = None odd_head = None odd_tail = None while current is not None: counter += 1 if counter % 2 == 0: # Check if the index is even if even_head is None: even_head = current even_tail = current else: even_tail.next = current even_tail = even_tail.next else: if odd_head is None: odd_head = current odd_tail = current else: odd_tail.next = current odd_tail = odd_tail.next current = current.next # Connect the even and odd lists if even_head is not None: even_tail.next = None if odd_head is not None: odd_tail.next = even_head return odd_head ```
hola

oddeven en C++

template<class T> void Lista<T>::oddLista() {
    //Defino los punteros fijos cabezas de linea
    Nodo<T>*inicio_impar= nullptr;
    Nodo<T>*inicio_par= nullptr;
    //punteros de movimiento
    Nodo<T> *general= nullptr;
    Nodo<T> *par= nullptr;
    Nodo<T> *impar= nullptr;

    inicio_impar=inicio;
    impar=inicio_impar;
    inicio_par=inicio_impar->getSiguiente();
    par=inicio_par;

    while (par!= nullptr && par->getSiguiente() != nullptr){
            impar->setSiguiente(par->getSiguiente());
            impar=par->getSiguiente();
            par->setSiguiente(impar->getSiguiente());
            par=impar->getSiguiente();
    }

    impar->setSiguiente(inicio_par);
}

Esta es mi solución en C++:




Hola [email protected], no se puede acceder al archivo de google drive.

Lo hice distinto, es la misma lógica que utilicé para solucionar en el Playground con js, ahora con Java y el método toString para ver cómo queda, este código va en la clase ListaEnlaza realizada en la sección 3:

    public void oddEvenLinkedList(Nodo cabeza) {
        if (cabeza == null || (cabeza == this.cola)) { // Si la lista es nula o tiene sólo 1 Nodo
            return;
        }
        Nodo anterior = cabeza;
        Nodo actual = cabeza.siguiente;
        Nodo colaOriginal = this.cola;
        Nodo aux;
        while (actual.siguiente != null) { 
            aux = actual.siguiente;
                       
            anterior.siguiente = actual.siguiente;
            this.cola.siguiente = actual;
            actual.siguiente = null;
            this.cola = actual;
            
            if (this.cola.equals(colaOriginal)) { // si la lista enlazada es de longitud par
                /*
                * Rompe el ciclo justo después de colocar como cola el Nodo colaOriginal
                */
                break;
            }
            
            anterior = aux;
            actual = aux.siguiente;
            
            if (anterior.equals(colaOriginal)) { // si la lista enlazada es longitud impar
                /*
                * Rompe el ciclo cuando llegamos al Nodo colaOriginal
                */                
                break;
            }            
            
        }  
    }
    
    @Override
    public String toString() {
        String respuesta = "";
        if (cabeza == null) { //Si la lista es vacía 
            respuesta = "ListaEnlazada{}";
        } else if (cabeza != null && cabeza == cola) { // Si la lista tiene solo 1 nodo
            respuesta = "ListaEnlazada{cabeza:" + cabeza.valor + ", cola: " + cola.valor + "}";
        } else {
            Nodo actual = cabeza;
            while(actual.siguiente != null) {
                respuesta += "actual: " + actual.valor + " -> ";
                actual = actual.siguiente;
            }
            respuesta +=  "actual: " + actual.valor;
        }
        
        return respuesta;
    }