Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Listas enlazadas - eliminar ocurrencias
/* Implementar una función que reciba una lista de números enteros y elimine todas las ocurrencias del número 5. Informar la cantidad de ocurrencias eliminadas. Se debe pasar una sola vez por cada uno de los elementos de la lista. */ #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 principio. Retorna el puntero inicial. */ Nodo* insertar_principio(Nodo* inicio, Nodo* nuevo) { nuevo->siguiente = inicio; return nuevo; } /* Genera un nuevo nodo con el dato pasado por parámetro y el puntero al siguiente en nullptr, y llama a una función que inserta ese nodo en la lista. Retorna el puntero inicial. */ Nodo* generar_nodo(Nodo* inicio, int dato) { Nodo* nuevo; nuevo = new Nodo; nuevo->dato = dato; nuevo->siguiente = nullptr; inicio = insertar_principio(inicio, nuevo); return inicio; } /* Imprime en pantalla todos los elementos de la lista. */ void imprimir_lista(Nodo* inicio) { for (Nodo* aux = inicio; aux != nullptr; aux = aux->siguiente) { cout << aux->dato << " "; } } /* Elimina de la lista todas las ocurrencias del número pasado por parámetro. Retorna la cantidad de eliminaciones que realizó. */ int eliminar_ocurrencias(Nodo* &inicio, int num) { int cantidad = 0; Nodo* a_eliminar; Nodo* aux = inicio; while (aux != nullptr) { if (inicio->dato == num) { //Este es el caso en que el elemento a eliminar está al inicio de la lista a_eliminar = inicio; inicio = inicio->siguiente; aux = inicio; delete a_eliminar; cantidad++; } else { if (aux->siguiente != nullptr && aux->siguiente->dato == num) { //Este es el caso en que el siguiente nodo se debe eliminar a_eliminar = aux->siguiente; aux->siguiente = a_eliminar->siguiente; delete a_eliminar; cantidad++; } else { //El siguiente nodo no se debe eliminar o no hay siguiente, entonces avanzamos aux = aux->siguiente; } } } return cantidad; } /* 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; //Genera datos de ejemplo y los inserta en la lista: inicio = generar_nodo(inicio, 5); inicio = generar_nodo(inicio, 8); inicio = generar_nodo(inicio, 2); inicio = generar_nodo(inicio, 5); inicio = generar_nodo(inicio, 10); inicio = generar_nodo(inicio, 5); inicio = generar_nodo(inicio, 5); //Imprime la lista original: imprimir_lista(inicio); cout << endl; //Elimina y muestra cuántos se eliminaron: cout << "Cantidad de ocurrencias eliminadas: " << eliminar_ocurrencias(inicio, 5); cout << endl; //Imprime la lista luego de modificada: imprimir_lista(inicio); }
run
|
edit
|
history
|
help
0
HashConPar
big boom!
qsort
Square of maximum
code_chef
ThreadPool
Expected GCD
floyd alfa 1
Matrix spiral print
asa