Skip to content

Instantly share code, notes, and snippets.

@AlmuHS
Created June 4, 2019 00:18
Show Gist options
  • Save AlmuHS/c23a10d4531f33b0b3d015773e2246e5 to your computer and use it in GitHub Desktop.
Save AlmuHS/c23a10d4531f33b0b3d015773e2246e5 to your computer and use it in GitHub Desktop.
Implementación de una lista enlazada sencilla en C++
#include <iostream>
using namespace std;
struct TNodo{
int datos;
TNodo* siguiente;
};
TNodo *inicial, *final;
void insertar(int dato){
TNodo* nuevo = new TNodo{dato, NULL};
final->siguiente = nuevo;
final = final->siguiente;
}
void insertar_medio(TNodo* pos, int dato){
TNodo* nuevo = new TNodo{dato, NULL};
nuevo->siguiente = pos->siguiente;
pos->siguiente = nuevo;
}
void borrar(TNodo *pos){
TNodo *actual = inicial;
while(actual->siguiente != pos && actual->siguiente != NULL){
actual = actual->siguiente;
}
if(actual->siguiente != NULL){
actual->siguiente = pos->siguiente;
}
else{
actual->siguiente = NULL;
}
delete(pos);
}
int main()
{
//Creamos los punteros al inicio y final de la lista
inicial = NULL;
final = inicial;
//Creamos el primer elemento de la lista
TNodo *nuevo = new TNodo{0, NULL};
inicial = nuevo;
final = inicial;
//Insertamos mas elementos en la lista
for(int i = 1; i < 11; i++){
insertar(i);
}
//Buscamos una posición intermedia donde hacer la inserción
TNodo *actual = inicial;
for(int i = 0; i < 5; i++){
actual = actual->siguiente;
}
//Insertamos un nuevo elemento en medio de la lista
insertar_medio(actual, 23);
//Mostramos el contenido de la lista
actual = inicial;
for(int i = 0; i < 11; i++){
actual = actual->siguiente;
cout<<actual->datos<<"\t";
}
cout<<"\nBorrando nodo recien insertado\n";
//Buscamos la posicion del elemento recien insertado
actual = inicial;
for(int i = 0; i < 6; i++){
actual = actual->siguiente;
}
TNodo *borrar_ptr = actual;
//Borramos el elemento recien insertado (en medio de la lista)
borrar(borrar_ptr);
//Volvemos a mostrar la lista
TNodo *nodo = inicial;
while(nodo->siguiente != NULL){
nodo = nodo->siguiente;
cout<<nodo->datos<<"\t";
}
//Borramos la lista
nodo = inicial->siguiente;
inicial = NULL;
delete(inicial);
while(nodo != NULL){
TNodo *borrar = nodo;
nodo = nodo->siguiente;
delete(borrar);
}
delete(nodo);
//Nos aseguramos de que la lista se ha borrado bien
if(inicial == NULL) cout<<"\nlista borrada\n";
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment