//Encuentra el nodo anterior al ingresado //Si es el primero retorna el ancla //Si el dato no existe trae el último nodo public CNodo BuscarAnterior(int pDato) { //Trabajo2 va a ser igual al ancla para comenzar la busqueda trabajo2 = ancla; //Mientras trabajo2 sea diferente de null y el nodo siguiente sea diferente a pDato entonces entra al cilo while (trabajo2.Siguiente != null && trabajo2.Siguiente.Dato != pDato) { //Asigna el nodo a trabajo2 trabajo2 = trabajo2.Siguiente; } return(trabajo2); }
//Inserta el valor que se quiere despupés de la ocurrencia del dato pasado a pDonde //pDonde es el dato del nodo desde el cual queremos que se haga la insersión //pValor es el dato que se va a insertar en el nuevo nodo public void Insertar(int pDonde, int pValor) { //Se busca y encuentra la posición en donde se desea insertar el dato trabajo = Buscar(pDonde); //Se hace una verificación para saber si existe el lugar donde se quiere insertar if (trabajo == null) { return; } //Se crea el nodo temporal que se quiere insertar CNodo temp = new CNodo(); temp.Dato = pValor; //Se conecta temp a la lista, es decir que se hace una referencia al valor siguiente temp.Siguiente = trabajo.Siguiente; //Se conecta trabajo al temp trabajo.Siguiente = temp; }
//Método para recorrer la lista public void Transversa() { //Trabajo la asigno al inicio(ancla) //Trabajo es quien se va a referencia nodo a nodo y va a estar al inicio de la lista trabajo = ancla; //Se recorre la lista hasta llegar al final, es decir hasta encontrar NULL while (trabajo.Siguiente != null) { //Trabajoo comienza a avanzar //Nos movemos al siguiente nodo trabajo = trabajo.Siguiente; //Se obitne el dato del nodo y se muestra //Obtengo el dato del nodo y lo muestro int nod = trabajo.Dato; Console.Write("{0},", nod); } //Se baja la linea Console.WriteLine(); }
//Agregar un siguiente elemento //El agregar siempre va al final public void Adicionar(int pDato) { //Colocamos trabajo en el incio de la lista trabajo = ancla; //Se recorre la lista hasta el final while (trabajo.Siguiente != null) { //Trabajo avanza entre los diferentes nodos trabajo = trabajo.Siguiente; } //Se crea un nuevo nodo //Aun no esta relacionado CNodo temp = new CNodo(); //Se inserta el datos en el nodo creado temp.Dato = pDato; //Se finaliza apuntando a null temp.Siguiente = null; //Ligar el utimo nodo encontrado con el recien creado trabajo.Siguiente = temp; }
//Buscar indice, es decir que va a mostrar la ubicación del nodo que se va a buscar //Es similar a los arreglos con las posiciones //El indice -1 es una información que el dato no fue encontrado public int BuscarIndice(int pDato) { //Se asigna -1 a n esto se hace porque trabajo está iniciando en el ancla //En donde el ancla inicia antes del primer nodo int n = -1; trabajo = ancla; while (trabajo.Siguiente != null) { trabajo = trabajo.Siguiente; //Se mueve en proporción al recorrido de trabajo, es decir nodo a nodo n++; //Si, el valor que tiene trabajo es igual al solicitado "pDato" //Retorna el valor de n, es decir del indicedionde se ubica el dato if (trabajo.Dato == pDato) { return(n); } } //Si no se encontró el pDato retorna -1 indicando que no está return(-1); }
//Borrar la primera ocurrencia del dato suministrado public void Borrar(int pDato) { //Se verifica que hayan datos dentro de los nodos de la lista if (EstaVacio() == true) { return; } //Se buscan los nodos con los que se quiere trabajar, es decir los que contienen el valor de pDato //La idea es tener una referencia al nodo del dato y al nodo anterior CNodo anterior = BuscarAnterior(pDato); CNodo encontrar = Buscar(pDato); //Si no hay nodos para borrar salimos de la función if (encontrar == null) { return; } //Brincamos el nodo, es decir que lo omitimos //Lo que hace es conectar el nodo anterior al dato buscado con el nodo siguiente al nodo del dato buscadi anterior.Siguiente = encontrar.Siguiente; //Como se "saltó" el nodo encontrado, es posible retirarlo de la lista encontrar.Siguiente = null; }
//Reglresa el primer nodo con el valor que se está buscando //Si el valor está en varios nodos trae la primera concurrencia //Si el nodo no existe va a regresar un null //Si si existe trae la referencia a ese lugar public CNodo Buscar(int pDato) { //Se verifica si la lista está vacía y retorna null de ser así if (EstaVacio() == true) { return(null); } //Se hace una variación a la trasversa //Trabajo 2 sirve de referencia para el nodo que se está buscando trabajo2 = ancla; //Como en la trasversa se recorre la lista para realizar la busqueda del valor ingresado while (trabajo2.Siguiente != null) { trabajo2 = trabajo2.Siguiente; //Si, el valor que tiene trabajo2 es igual al solicitado "pDato" //Retorna el valor de trabajo2 if (trabajo2.Dato == pDato) { return(trabajo2); } } //Si no se encontró el pDato retorna null indicando que no está return(null); }