Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Listas enlazadas - dividir lista en dos reutilizando nodos
/* Implementar una función que reciba la lista de números y genere dos nuevas listas, una con los números pares y otra con los impares. Las nuevas listas deberán estar formadas con los nodos de la lista original, la que quedará vacía después de invocar a la función. */ #include <iostream> using namespace std; struct Nodo { int dato; Nodo *siguiente; }; /* Dado el puntero inicial a una lista y el puntero a un nuevo nodo que aún no está en la lista, inserta este nuevo nodo al final. Retorna el puntero inicial. */ Nodo* insertar_final(Nodo* inicio, Nodo* nuevo) { if (inicio == nullptr) { inicio = nuevo; } else { Nodo* aux = inicio; while (aux->siguiente != nullptr) { aux = aux->siguiente; } aux->siguiente = nuevo; } return inicio; } /* Iterativamente, genera un nuevo nodo con un dato y el siguiente en nullptr, y lo envía a una función que inserta ese nodo en la lista. Retorna el puntero inicial. */ Nodo* carga(Nodo* inicio) { Nodo* nuevo; for (int numero = 1; numero <= 10; numero++){ nuevo = new Nodo; nuevo->dato = numero; nuevo->siguiente = nullptr; inicio = insertar_final(inicio, nuevo); } return inicio; } /* Imprime en pantalla todos los elementos de la lista. Si el puntero inicial es nullptr, imprime el texto "Lista vacía". */ void imprimir(Nodo* inicio){ if (inicio == nullptr) { cout << "Lista vacia"; } else { for (Nodo* aux = inicio; aux != nullptr; aux = aux->siguiente) { cout << aux->dato << " "; } } cout << endl; } /* Recibe el puntero inicial de una lista con elementos y dos punteros iniciales de listas vacías. Coloca en una lista los nodos con números pares y, en la otra, los nodos con números impares. */ void nuevasListas(Nodo* & inicio, Nodo* & pares, Nodo* & impares){ Nodo* anterior; while (inicio != nullptr){ anterior = inicio; inicio = inicio->siguiente; anterior->siguiente = nullptr; if (anterior->dato % 2 == 0){ pares = insertar_final(pares, anterior); } else{ impares = insertar_final(impares, anterior); } } } /* Función principal del programa. Se inicializan punteros iniciales de tres listas y se llama a funciones para cargarlas y realizar otras operaciones */ int main() { Nodo* inicio = nullptr; //lista original Nodo* pares = nullptr; Nodo* impares = nullptr; inicio = carga(inicio); cout << "Lista original: "; imprimir(inicio); nuevasListas(inicio, pares, impares); cout << "Lista de pares: "; imprimir(pares); cout << "Lista de impares: "; imprimir(impares); cout << "Lista original: "; imprimir(inicio); }
run
|
edit
|
history
|
help
0
CutRod(BottomUp)
decrypt_problem_5
LIS
Prime_Number_Cpp
Simple use of function templete and namespace
PhoneDirectory
Smart Pointers
Proga1
Flowchart segitiga
Handling new types without using RTTI