linked-lists/lista.cpp

135 lines
2.7 KiB
C++

#include <cstdlib>
#include <iostream>
#include "lista.h"
using namespace std;
Lista::Lista()
{
head = NULL;
current = NULL;
temp = NULL;
}
void Lista::AddNodeToEnd ( int data )
{
nodePtr n = new node;
n->next = NULL;
n->data = data;
if ( head != NULL ) { //Si la lista tiene elementos, inicia el recorrido.
current = head;
while ( current->next != NULL ) { //Si no esta al final de la lista, continua.
current = current->next;
}
current->next = n;
} else {
head = n;
}
}
void Lista::DeleteNode ( int data )
{
nodePtr delPtr = NULL;
temp = head;
current = head;
while ( current != NULL && current->data != data ) { //Siempre que hayan más nodos y la info del nodo actual no sea la buscada, entonces continúa buscando.
temp = current;
current = current->next;
}
if ( current == NULL ) { //Si se queda sin lista, no estaba el elemento.
cout << "Valor " << data << " no encontrado en la lista.\n";
delete delPtr;
} else {
delPtr = current;
current = current->next;
temp->next = current;
delete delPtr;
cout << "Elemento borrado.\n";
}
}
void Lista::PrintLista()
{
current = head;
while ( current!=NULL ) {
cout << current->data << endl;
current = current->next;
}
}
void Lista::AddNodeToStart (int data)
{
nodePtr n = new node;
n->next = NULL;
n->data = data;
if (head != NULL)
{
current = head;
n->next = current;
head = n;
}
else
{
head = n;
}
}
void Lista::DeleteNodeByPosition (int position)
{
nodePtr delPtr = NULL;
temp = head;
current = head;
for(int i = 0; i < position ; ++i)
{
if(current->next != NULL)
{
temp = current;
current = current->next;
}
else
{
cout << "Esa posición no existe.\n";
break;
}
}
delPtr = current;
if (current->next != NULL)
{
current = current->next;
temp->next = current;
}
else
{
temp->next = NULL;
}
delete delPtr;
}
void Lista::FindNode(int data)
{
nodePtr n = new node;
temp = head;
current = head;
while ( current != NULL && current->data != data ) { //Siempre que hayan más nodos y la info del nodo actual no sea la buscada, entonces continúa buscando.
temp = current;
current = current->next;
}
if ( current == NULL ) { //Si se queda sin lista, no estaba el elemento.
cout << "Valor " << data << " no encontrado en la lista.\n";
}
else
{
cout << "El dato introducido fue encontrado.\n";
}
}