public Lista_Ligada() { //Instanciamos el ancla ancla = new Nodito(); //Cómo es una lista vacía, su siguiente es null ancla.setSiguiente(null); }
/* * Encontrar el nodo anterior * Si esta en el primer nodo se regresa al ancla * Si el dato no existe se regresa el ultimo nodo */ public Nodito getNoditoAnterior(int valor) { trabajo2 = ancla; while (trabajo2.getSiguiente() != null && trabajo2.getSiguiente().getDato() != valor) { trabajo2 = trabajo2.getSiguiente(); } return(trabajo2); }
// Obtener el tamaño de elementos... public int getSize() { trabajo = ancla; int size = 0; while (trabajo.getSiguiente() != null) { trabajo = trabajo.getSiguiente(); size++; } return(size); }
//Insertar valor al inicio public void insertarInicio(int valor) { Nodito dato = new Nodito(); dato.setDato(valor); if (isEmpty()) { Agregar(valor); } else { dato.setSiguiente(ancla.getSiguiente()); ancla.setSiguiente(dato); } }
//Recorre toda la lista public void Transversa() { //Trabajo al Inicio trabajo = ancla; //Recorremos hasta encontrar el final while (trabajo.getSiguiente() != null) { //Avanzamos trabajo trabajo = trabajo.getSiguiente(); //Obtenemos el dato y lo mostramos int d = trabajo.getDato(); Console.Write("{0} -> ", d); } //Bajamos la linea Console.WriteLine(); }
// Indexer ??? public int?this[int indice] { get { trabajo = getIndiceNodito(indice); return(trabajo.getDato()); } set { trabajo = getIndiceNodito(indice); if (trabajo != null) { trabajo.setDato(Convert.ToInt32(value)); } } }
// Regresa el indice del Nodo public int getIndice(int valor) { int n = -1; trabajo = ancla; while (trabajo.getSiguiente() != null) { trabajo = trabajo.getSiguiente(); n++; if (trabajo.getDato() == valor) { return(n); } } return(-1); }
//Obtener el nodo que se encuentra en indice especificado public Nodito getIndiceNodito(int indice) { if (isEmpty() || indice > getSize()) { return(ancla); } trabajo = ancla; int n = 0; while (trabajo.getSiguiente() != null && n != indice) { trabajo = trabajo.getSiguiente(); n++; } return(trabajo); }
// Insertar un valor después de la primera ocurrencia del dato pasado a pDonde public void Insertar(int indiceInsercion, int valor) { // Encontramos la posición donde vamos a insertar trabajo = Buscar(indiceInsercion); if (trabajo == null) { return; } //Creamos el nodo temporal a insertar Nodito temporal = new Nodito(); temporal.setDato(valor); //Conectamos el temporal a la lista temporal.setSiguiente(trabajo.getSiguiente()); //Conectamos trabajo a temporal trabajo.setSiguiente(temporal); }
// Regresa el nodo con la primera ocurrencia del dato public Nodito Buscar(int valor) { if (isEmpty()) { return(null); } trabajo2 = ancla; //Recorremos para ver si lo encontramos while (trabajo2.getSiguiente() != null) { trabajo2 = trabajo2.getSiguiente(); //Al encontrarlo lo regresamos... if (trabajo2.getDato() == valor) { return(trabajo2); } } //No se encontró, regresamos null return(null); }
//Agregar nuevo elemento a la lista public void Agregar(int valor) { //Trabajo al Inicio trabajo = ancla; //Recorremos hasta encontrar el final while (trabajo.getSiguiente() != null) { //Avanzamos trabajo trabajo = trabajo.getSiguiente(); } // Creamos el nuevo nodo Nodito temporal = new Nodito(); //Insertemos el dato temporal.setDato(valor); //Finalizamos correctamente temporal.setSiguiente(null); //Ligamos el ultimo nodo encontrado con el recien creado trabajo.setSiguiente(temporal); }
//Borrar elemento de la lista public void borrarElemento(int valor) { //Verificamos que se tengan datos. if (isEmpty()) { return; } // Buscamos los nodos con los que trabajaremos Nodito anterior = getNoditoAnterior(valor); Nodito encontrado = Buscar(valor); // Si no hay nodo a borrar, salimos if (encontrado == null) { return; } //Brincamos el nodo anterior.setSiguiente(encontrado.getSiguiente()); // Quitamos el actual de la lista. encontrado.setSiguiente(null); }
static void Main(string[] args) { Lista_Ligada listita = new Lista_Ligada(); listita.Agregar(3); listita.Agregar(5); listita.Agregar(7); listita.Agregar(9); listita.Agregar(11); listita.Agregar(15); listita.Transversa(); Console.WriteLine(listita.isEmpty()); //listita.Vaciar(); //listita.Transversa(); //Console.WriteLine(listita.isEmpty()); listita.borrarElemento(7); listita.Transversa(); listita.borrarElemento(3); listita.Transversa(); listita.Insertar(11, 20); listita.Transversa(); listita.Insertar(5, 7); listita.Transversa(); listita.Insertar(7, 1000); listita.Insertar(3, 12); listita.Transversa(); Console.WriteLine("-------------"); Console.WriteLine("Insertar Inicio"); listita.insertarInicio(9); listita.Transversa(); listita.insertarInicio(84938); listita.insertarInicio(1010101); listita.Transversa(); Console.WriteLine("-------------"); Console.WriteLine("-------------"); Console.WriteLine("Obtener Nodo por Indice"); Nodito elemento = listita.getIndiceNodito(1); if (elemento.Equals(listita.ancla)) { Console.WriteLine("Error Indice Fuera de Rango..."); } else { Console.WriteLine(elemento); } Console.WriteLine("-------------"); Nodito encontrado = listita.Buscar(15); Console.WriteLine(encontrado); int indice = listita.getIndice(97); if (indice != -1) { Console.WriteLine(indice); } Console.WriteLine("---Indexer---"); listita.Transversa(); Console.WriteLine(listita[3]); listita[3] = 66; listita.Transversa(); Console.WriteLine("-------------"); }
internal void setSiguiente(Nodito value) { siguiente = value; }