• Viernes 29 de Marzo de 2024, 01:49

Autor Tema:  Insertar Un Nodo Antes De Otro Con Una Referenci  (Leído 6219 veces)

LEGOLASYEE

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Insertar Un Nodo Antes De Otro Con Una Referenci
« en: Jueves 1 de Mayo de 2008, 17:43 »
0
Bueno gentes, hola primero que nada ya tenia tiempo que ingresaba a este foro.
Quiero ver sii alguien me podria dar una ayudada con este codigo ya que se trata de ingresar un nodo antes de otro dando la referencia de el dato en el que se desea que ingrese antes, es decir si digo que "pedro" debe de ingresar antes que "antonio", y es que solo me funciona en ciertos caso, en un cierto nodo, no para cualquier posicion, haber si me podrian ayudar aqui se los dejo.

Código: Text
  1.   //INSERTAR ANTES DE UN NODO
  2.     static void InsertarAntes(ref NodoT RaizListaAlumnos, string Dato, string DatoReferencia)
  3.     {
  4.       if(RaizListaAlumnos==null)
  5.       {
  6.         InsertarInicio(ref RaizListaAlumnos, Dato);
  7.       }
  8.       else
  9.       {
  10.         //Guardar la direccion del ultimo nodo
  11.         NodoT UltimoNodo=RaizListaAlumnos;
  12.         NodoT PenultimoNodo=RaizListaAlumnos;
  13.         //
  14.         while(UltimoNodo.Informacion!=DatoReferencia)
  15.         {
  16.           UltimoNodo=UltimoNodo.Liga;
  17.          
  18.         }
  19.         //Crear al Nueno Nodo
  20.         NodoT NuevoNodo= new NodoT();
  21.         NuevoNodo.Liga=UltimoNodo;
  22.         NuevoNodo.Informacion=Dato;
  23.         PenultimoNodo.Liga=NuevoNodo;
  24.       }
  25.     }
  26.  
COMPAÑEROS VENIMOS CONTENTOS A LAS VOZ DE NUESTRO CORAZON...CORAZON...
Y AL CARIÑO QUE TODO TENEMOS AL GLORIOSO PENTATHLON...PENTATHLON...

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #1 en: Jueves 1 de Mayo de 2008, 19:29 »
0
Para poder entender mejor el problema necesitas decirnos que tipo de lista es? Simple o circular? Ligada, o doblemente ligada?

A simple vista parece simple, con una liga, y con ese razonamiento me parece que hay algo mal en este ciclo:

Código: Text
  1.  
  2.         while(UltimoNodo.Informacion!=DatoReferencia)
  3.         {
  4.           UltimoNodo=UltimoNodo.Liga;
  5.          
  6.         }
  7.  
  8.  

Que pasa si no encuentras DatoReferencia? No tiene forma de salir del ciclo, creo que falta una condicion, que UltimoNodo != null a menos que fuera circular, en cuyo caso, necesitas una variable para saber cuando llegas al primer elemento otra vez, porque si no, al llegar al ultimo, como apunta al primero, se regresa al principio, y como dije antes, nunca saldrias del ciclo.

ahora, en esta parte:

Código: Text
  1.  
  2.         NodoT UltimoNodo=RaizListaAlumnos;
  3.         NodoT PenultimoNodo=RaizListaAlumnos;
  4.  
  5.  

haces que UltimoNodo y PenultimoNodo apuntes al mismo nodo (raiz), pero despues en el ciclo solo avanzas solamente UltimoNodo, y dejas a PenultimoNodo retrasado, o sea que si el elemento que buscas esta en la posicion 10, ultimo nodo estara en 10, pero penultimo nodo siempre estara en el principio (raiz), y por lo tanto, no sera al penultimo, asi que lo que debes hacer, es avanzar a penultimo nodo, de tal forma que siempre este un paso atras de ultimo nodo, no se si me explico.

Creo que por ahi estaria el error.

Saludos :hola:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

LEGOLASYEE

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #2 en: Jueves 1 de Mayo de 2008, 21:05 »
0
es una lista simple, se trata de tener en nombres, y de insertar un nombre antes de otro:

por ejemplo:

PEDRO-----------MARIO-----------------JUAN       Se va a insertar "CARLOS" antes de "JUAN"

de eso se trata.
COMPAÑEROS VENIMOS CONTENTOS A LAS VOZ DE NUESTRO CORAZON...CORAZON...
Y AL CARIÑO QUE TODO TENEMOS AL GLORIOSO PENTATHLON...PENTATHLON...

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #3 en: Viernes 2 de Mayo de 2008, 00:26 »
0
En ese caso, adivine bien, y entonces aplica la respuesta que te he dado antes.
Resumiendo y repitiendo.

1. Añade una condicion al ciclo para salir cuando UltimoNodo sea igual a null, en caso de no encontrarlo.

2. Haz que PenultimoNodo este atras de UltimoNodo, para que realmente este uno antes, y no se quede en el primer nodo.

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

LEGOLASYEE

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #4 en: Viernes 2 de Mayo de 2008, 00:37 »
0
pero no tengo ni idea de como aser que penultimonodo valla atras de ultimonodo, es que este es un tema nuevo, y eh tratado de investigar y nomas no hallo nada, ya me desespere jejejejejje.
COMPAÑEROS VENIMOS CONTENTOS A LAS VOZ DE NUESTRO CORAZON...CORAZON...
Y AL CARIÑO QUE TODO TENEMOS AL GLORIOSO PENTATHLON...PENTATHLON...

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #5 en: Viernes 2 de Mayo de 2008, 02:03 »
0
mmmm no es gran ciencia, queria que lo analizaras, pero ni modo, aqui te va:

dentro del while que haces la busqueda, en la parte que dice:
Código: Text
  1.  
  2. UltimoNodo=UltimoNodo.Liga;
  3.  
  4.  

debe ser:

Código: Text
  1.  
  2. /// Haces que PenultimoNodo tenga la direccion de UltimoNodo, de ese modo,
  3. /// al avanzar UltimoNodo, PenultimoNodo sienpre tendra la direccion anterior.
  4. PenultimoNodo = UltimoNodo;
  5. UltimoNodo = UltimoNodo.Liga;
  6.  
  7.  

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

LEGOLASYEE

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #6 en: Viernes 2 de Mayo de 2008, 02:21 »
0
emm creo que sigo al perdido, ya trate de implementar lo que me dijiste a como lo entendi pero sigo en las mismas...

Código: Text
  1. //INSERTAR ANTES DE UN NODO
  2.     static void InsertarAntes(ref NodoT RaizListaAlumnos, string Dato, string DatoReferencia)
  3.     {
  4.       if(RaizListaAlumnos==null)
  5.       {
  6.         InsertarInicio(ref RaizListaAlumnos, Dato);
  7.       }
  8.       else
  9.       {
  10.         NodoT UltimoNodo=RaizListaAlumnos;
  11.         NodoT PenultimoNodo=UltimoNodo;
  12.         while(UltimoNodo.Informacion!=DatoReferencia)
  13.         {
  14.           if(UltimoNodo.Informacion==DatoReferencia)
  15.           {
  16.             PenultimoNodo = UltimoNodo;
  17.             UltimoNodo = UltimoNodo.Liga;
  18.           }
  19.         }
  20.         NodoT NuevoNodo=new NodoT();
  21.         NuevoNodo.Liga=UltimoNodo;
  22.         PenultimoNodo.Liga=NuevoNodo;
  23.       }
  24.     }
  25.  
COMPAÑEROS VENIMOS CONTENTOS A LAS VOZ DE NUESTRO CORAZON...CORAZON...
Y AL CARIÑO QUE TODO TENEMOS AL GLORIOSO PENTATHLON...PENTATHLON...

LEGOLASYEE

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #7 en: Viernes 2 de Mayo de 2008, 20:56 »
0
bueno le modifique algunas cosas pero aun asi sigo en las mimas, solo me inserta antes del segundo nodo, ocupo su ayuda gentes por favor.

Código: Text
  1.   //INSERTAR ANTES DE UN NODO
  2.     static void InsertarAntes(ref NodoT RaizListaAlumnos, string Dato, string DatoReferencia)
  3.     {
  4.       if(RaizListaAlumnos==null)
  5.       {
  6.         InsertarInicio(ref RaizListaAlumnos, Dato);
  7.       }
  8.       else
  9.       {
  10.         NodoT UltimoNodo=RaizListaAlumnos;
  11.         NodoT PenultimoNodo=UltimoNodo;
  12.         while(UltimoNodo.Informacion!=DatoReferencia)
  13.         {
  14.             PenultimoNodo = UltimoNodo;
  15.             UltimoNodo = UltimoNodo.Liga;
  16.             break;
  17.         }
  18.         NodoT NuevoNodo=new NodoT();
  19.         NuevoNodo.Liga=UltimoNodo;
  20.         NuevoNodo.Informacion=Dato;
  21.         PenultimoNodo.Liga=NuevoNodo;
  22.       }
  23.     }
  24.  
COMPAÑEROS VENIMOS CONTENTOS A LAS VOZ DE NUESTRO CORAZON...CORAZON...
Y AL CARIÑO QUE TODO TENEMOS AL GLORIOSO PENTATHLON...PENTATHLON...

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #8 en: Sábado 3 de Mayo de 2008, 03:45 »
0
Bueno, se que es contra la politica del foro hacer la tarea, pero este caso me parecio interesante, porque la mayoria de los algoritmos insertan el nodo despues del nodo encontrado, y no antes, asi que me tome la libertad de hacerlo, y posteo el resultado, espero que no lo eliminen ;)

Código: Text
  1.  
  2.         static void InsertarAntes(ref NodoT RaizListaAlumnos, string Dato, string DatoReferencia)
  3.         {
  4.             if (RaizListaAlumnos == null)
  5.             {
  6.                 RaizListaAlumnos = new NodoT();
  7.                 RaizListaAlumnos.Informacion = Dato;
  8.                 RaizListaAlumnos.Liga = null;
  9.             }
  10.             else
  11.             {
  12.                 NodoT UltimoNodo = RaizListaAlumnos;
  13.                 NodoT PenultimoNodo = UltimoNodo;
  14.                 bool Salir = false;
  15.                 while (!Salir && UltimoNodo != null)
  16.                 {
  17.                     if (UltimoNodo.Informacion == DatoReferencia)
  18.                         Salir = true;
  19.                     else
  20.                     {
  21.                         PenultimoNodo = UltimoNodo;
  22.                         UltimoNodo = UltimoNodo.Liga;
  23.                     }
  24.                 }
  25.                 NodoT NuevoNodo = new NodoT();
  26.                 NuevoNodo.Informacion = Dato;
  27.                 NuevoNodo.Liga = UltimoNodo;
  28.  
  29.                 /// Esta condicion es en el caso especial de que queramos
  30.                 /// insertar antes del primer nodo, en cuyo caso debemos
  31.                 /// hacer que el primer nodo sea el nuevo nodo.
  32.                 if (RaizListaAlumnos == PenultimoNodo && RaizListaAlumnos == UltimoNodo)
  33.                 {
  34.                     RaizListaAlumnos = NuevoNodo;
  35.                 }
  36.                 /// Si no es el primer nodo, se inserta en medio.
  37.                 else
  38.                 {
  39.                     PenultimoNodo.Liga = NuevoNodo;
  40.                 }
  41.             }
  42.         }
  43.  
  44.  

Lo probe con los siguientes datos:
Código: Text
  1.  
  2.             InsertarAntes(ref Raiz, "Pedro", "Pedro");
  3.             InsertarAntes(ref Raiz, "Juan", "Pedro");
  4.             InsertarAntes(ref Raiz, "Luis", "Pedro");
  5.             InsertarAntes(ref Raiz, "Paco", "Luis");
  6.             InsertarAntes(ref Raiz, "Jesus", "Hugo");
  7.             InsertarAntes(ref Raiz, "Hugo", "Juan");
  8.  
  9.  

Si el dato no se encuentra, inserta el nodo al final.

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

LEGOLASYEE

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #9 en: Sábado 3 de Mayo de 2008, 05:11 »
0
oooooooooooooo muchas gracias profe, me sirvio de mucho corre perfectamente, bueno ya sali de una, ahora solo me falta que elimine el ultimo nodo, y eliminar un nodo con referencia, pero no me quiero colgar demas, gracias, si se me atora en algo yo aviso, muchisimas gracias profe x.
COMPAÑEROS VENIMOS CONTENTOS A LAS VOZ DE NUESTRO CORAZON...CORAZON...
Y AL CARIÑO QUE TODO TENEMOS AL GLORIOSO PENTATHLON...PENTATHLON...

LEGOLASYEE

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Insertar Un Nodo Antes De Otro Con Una Referenci
« Respuesta #10 en: Sábado 3 de Mayo de 2008, 18:14 »
0
Bueno aqui dejando a dejar el programa ya terminado, gracias porfe, gracias a usted sali del enrededo donde estaba ahi se los dejo ya todo el codigo terminado.

Código: Text
  1. using System;
  2.  
  3. namespace Ejemplo_de_Listas_Simples
  4. {
  5.   //Declaracion del tipo de estructura Nodo
  6.   public class NodoT              //DECLARACION DE LA ESTRUCTURA
  7.   {                      
  8.     //Campos            
  9.     public string Informacion;
  10.     public NodoT Liga;
  11.     //Indicar los Constructores
  12.     public NodoT()
  13.     {
  14.       this.Informacion=null;
  15.       this.Liga=null;
  16.     }
  17.   }//Fin de NodoT
  18.   /// <summary>
  19.   /// Descripción breve de Class1.
  20.   /// </summary>
  21.   class Class1
  22.   {
  23.     /// <summary>
  24.     /// Punto de entrada principal de la aplicación.
  25.     /// </summary>
  26.     [STAThread]
  27.     static void Main(string[] args)
  28.     {
  29.       //======================================================================================
  30.       //OBJETIVO: Programa que realize todas los operaciones que se pueden realizar con las
  31.       //      lista, por medio de menu donde se eligen las opciones que se desean realizar
  32.       //        - insercion por el final
  33.       //        - insercion por el final
  34.       //        - insertar antes de un elemento
  35.       //        - insertar despues de un elemento
  36.       //        - eliminar el primer nodo
  37.       //        - eliminar el ultimo nodo
  38.       //        - eliminar un nodo deseado con referencia de cual se desea eliminar
  39.       //        - recorrido de izquierda a derecha imprimiendo los datos
  40.       //PROGRAMADO: Antonio Yee
  41.       //FECHA: 03/MAY/08
  42.       //=======================================================================================
  43.       int Opcion=0;
  44.       string Dato="";
  45.       string DatoReferencia="";
  46.       //Crear una Lista
  47.       NodoT RaizListaAlumnos=null;
  48.       do
  49.       {
  50.         Opcion=Menu();
  51.         switch(Opcion)
  52.         {
  53.             //llamado de la lectura y de la insercion a inicio
  54.           case 1:Lectura(out Dato);
  55.             InsertarInicio(ref RaizListaAlumnos, Dato);
  56.             break;
  57.             //llamdo de la lectura e insercion al final
  58.           case 2:Lectura(out Dato);
  59.             InsertarFinal(ref RaizListaAlumnos, Dato);
  60.             break;
  61.             //llamado de lectura de dato a ingresar, la lectura del dato donde se quiere que se
  62.             //inserte antes y el metodo de insercion antes del nodo
  63.           case 3:Lectura(out Dato);
  64.             LecturaReferencia(out DatoReferencia);
  65.             InsertarAntes(ref RaizListaAlumnos, Dato, DatoReferencia);
  66.             break;
  67.             //llamdo de la lectura del dato que se va a ingresar, el dato donde se ba a insertar
  68.             //despues y el metodo de insercion despues de un nodo x
  69.           case 4:Lectura(out Dato);
  70.             LecturaReferencia(out DatoReferencia);
  71.             InsertarDespues(ref RaizListaAlumnos, Dato, DatoReferencia);
  72.             break;
  73.             //eliminacion del primer nodo de la lista
  74.           case 5:EliminarPrimerNodo(ref RaizListaAlumnos);
  75.             Menu();
  76.             break;
  77.             //eliminacion del ultimo nodo de la lista
  78.           case 6:EliminarUltimoNodo(ref RaizListaAlumnos);
  79.             Menu();
  80.             break;
  81.             //lectura del dato que se quiere eliminar y el metodo donde se elimina el nodo
  82.             //deseado
  83.           case 7:LecturaEliminar(out DatoReferencia);
  84.             EliminarNodoX(ref RaizListaAlumnos, DatoReferencia);
  85.             break;
  86.             //impresion de la lista con todas las modificaciones
  87.           case 8:ImprimirIzquierdoDerecho(RaizListaAlumnos);
  88.             break;
  89.             //el final del programa
  90.           case 9:Finalizar();
  91.             break;
  92.         }
  93.       }while(Opcion!=9);
  94.     }
  95.     //=====================================
  96.     //        MENU
  97.     //=====================================
  98.     static int Menu()
  99.     {
  100.       int Resultado=0;
  101.       do
  102.       {
  103.         //Formato de menu que se sale en pantalla
  104.         Console.WriteLine("|=======================================|");
  105.         Console.WriteLine("|=============MENU DE LISTAS============|");
  106.         Console.WriteLine("|=======================================|");
  107.         Console.WriteLine("| 1.- Insertar al Inicio    |");
  108.         Console.WriteLine("| 2.- Insertar al Final      |");
  109.         Console.WriteLine("| 3.- Insertar Antes de un Elemento  |");
  110.         Console.WriteLine("| 4.- Insertar Despues de un Elemento  |");
  111.         Console.WriteLine("| 5.- Eliminar el Primer Nodo    |");
  112.         Console.WriteLine("| 6.- Eliminar el Ultimo Nodo    |");
  113.         Console.WriteLine("| 7.- Eliminar un Nodo X(Referencia)  |");
  114.         Console.WriteLine("| 8.- Imprimir Izq-Der      |");
  115.         Console.WriteLine("| 9.- Finalizar        |");
  116.         Console.WriteLine("|=======================================|");
  117.         Console.Write("Teclee la Opcion: ");
  118.         Resultado=int.Parse(Console.ReadLine());
  119.         Console.WriteLine("");
  120.         if(Resultado<1||Resultado>9)
  121.         {
  122.           Console.Write("ERROR, Opcion Incorrecta...");
  123.           Console.ReadLine();
  124.           Console.WriteLine("");
  125.         }
  126.       }while(Resultado<1||Resultado>9);
  127.       return Resultado;
  128.     }
  129.     //=================================================
  130.     //METODO DE LECTURA DE DATOS QUE SE VAN  A INSERTAR
  131.     //=================================================
  132.     static void Lectura(out string Dato)
  133.     {
  134.       Console.Write("Teclee el Dato a Insertar: ");
  135.       Dato=Console.ReadLine();
  136.       Console.WriteLine("");
  137.     }
  138.     //==========================================================================
  139.     //METODO DE LECTURA DE LA REFERENCIA PARA INSERTAR ELEMENTOS ANTES O DESPUES
  140.     //==========================================================================
  141.     static void LecturaReferencia(out string DatoReferencia)
  142.     {
  143.       Console.Write("Teclee el Dato de Referencia: ");
  144.       DatoReferencia=Console.ReadLine();
  145.       Console.WriteLine("");
  146.     }
  147.     //======================================================
  148.     //METODO DE LECTURA DE LOS DATOS QUE SE DESEAN ELIMINAR
  149.     //======================================================
  150.     static void LecturaEliminar(out string DatoReferencia)
  151.     {
  152.       Console.Write("Que dato es el que desea Eliminar: ");
  153.       DatoReferencia=Console.ReadLine();
  154.       Console.WriteLine("");
  155.     }
  156.     //==========================================
  157.     //METODO PARA INSERTAR AL INICIO DE LA LISTA
  158.     //==========================================
  159.     static void InsertarInicio(ref NodoT RaizListaAlumnos, string Dato)
  160.     {
  161.       //Crear al Nueno Nodo
  162.       NodoT NuevoNodo= new NodoT();
  163.       //Insertar el dato en el nuevo Nodo
  164.       NuevoNodo.Informacion=Dato;
  165.       //darle a la liga el valor del siguiente nodo
  166.       NuevoNodo.Liga=RaizListaAlumnos;
  167.       //darle a la raiz la direccion del nuevo nodo
  168.       RaizListaAlumnos=NuevoNodo;      
  169.     }
  170.     //=========================================
  171.     //METODO PARA INSERTAR AL FINAL DE LA LISTA
  172.     //=========================================
  173.     static void InsertarFinal(ref NodoT RaizListaAlumnos, string Dato)
  174.     {
  175.       if(RaizListaAlumnos==null)
  176.       {
  177.         InsertarInicio(ref RaizListaAlumnos, Dato);
  178.       }
  179.       else
  180.       {
  181.         //Guardar la direccion del ultimo nodo
  182.         NodoT UltimoNodo=RaizListaAlumnos;
  183.         while(UltimoNodo.Liga!=null)
  184.         {
  185.           UltimoNodo=UltimoNodo.Liga;
  186.         }
  187.         //Crear al Nueno Nodo
  188.         NodoT NuevoNodo= new NodoT();
  189.         //Insertar el dato en el nuevo Nodo
  190.         NuevoNodo.Informacion=Dato;
  191.         //Ligar el ultimo nodo con el nuevo nodo
  192.         UltimoNodo.Liga=NuevoNodo;
  193.       }
  194.     }
  195.     //=========================
  196.     //INSERTAR ANTES DE UN NODO
  197.     //=========================
  198.     static void InsertarAntes(ref NodoT RaizListaAlumnos, string Dato, string DatoReferencia)
  199.     {
  200.       if (RaizListaAlumnos == null)//por si la lista esta vacia se inserta al inicio todo los elementos
  201.       {
  202.         RaizListaAlumnos = new NodoT();
  203.         RaizListaAlumnos.Informacion = Dato;
  204.         RaizListaAlumnos.Liga = null;
  205.       }
  206.       else
  207.       {
  208.         NodoT UltimoNodo = RaizListaAlumnos;
  209.         NodoT PenultimoNodo = UltimoNodo;
  210.         bool Salir = false;
  211.         while (!Salir && UltimoNodo != null)
  212.         {
  213.           if (UltimoNodo.Informacion == DatoReferencia)
  214.           {
  215.             Salir = true;
  216.           }
  217.           else
  218.           {
  219.             PenultimoNodo = UltimoNodo;
  220.             UltimoNodo = UltimoNodo.Liga;
  221.           }
  222.         }
  223.         NodoT NuevoNodo = new NodoT();
  224.         NuevoNodo.Informacion = Dato;
  225.         NuevoNodo.Liga = UltimoNodo;
  226.         // Esta condicion es en el caso especial de que queramos
  227.         // insertar antes del primer nodo, en cuyo caso debemos
  228.         // hacer que el primer nodo sea el nuevo nodo.
  229.         if (RaizListaAlumnos == PenultimoNodo && RaizListaAlumnos == UltimoNodo)
  230.         {
  231.           RaizListaAlumnos = NuevoNodo;
  232.         }
  233.         // Si no es el primer nodo, se inserta en medio.
  234.         else
  235.         {
  236.           PenultimoNodo.Liga = NuevoNodo;
  237.         }
  238.       }
  239.     }
  240.     //===========================
  241.     //INSERTAR DESPUES DE UN NODO
  242.     //===========================
  243.     static void InsertarDespues(ref NodoT RaizListaAlumnos, string Dato, string DatoReferencia)
  244.     {
  245.       if(RaizListaAlumnos==null)
  246.       {
  247.         InsertarInicio(ref RaizListaAlumnos, Dato);
  248.       }
  249.       else
  250.       {
  251.         NodoT UltimoNodo=RaizListaAlumnos;
  252.         while(UltimoNodo.Informacion!=DatoReferencia)
  253.         {
  254.           UltimoNodo=UltimoNodo.Liga;
  255.         }
  256.         NodoT NuevoNodo= new NodoT();
  257.         NuevoNodo.Informacion=Dato;
  258.         NuevoNodo.Liga=UltimoNodo.Liga;
  259.         UltimoNodo.Liga=NuevoNodo;
  260.       }
  261.     }
  262.     //===================================
  263.     //METODO PARA ELIMINAR EL PRIMER NODO
  264.     //===================================
  265.     static void EliminarPrimerNodo(ref NodoT RaizListaAlumnos)
  266.     {
  267.       if(RaizListaAlumnos==null)
  268.       {
  269.         Console.WriteLine("Lista Vacia,...");
  270.         Console.ReadLine();
  271.         Console.WriteLine("");
  272.       }
  273.       else
  274.       {
  275.         NodoT PrimerNodo=RaizListaAlumnos;
  276.         RaizListaAlumnos=PrimerNodo.Liga;
  277.       }
  278.     }
  279.     //===================================
  280.     //METODO PARA ELIMINAR EL ULTIMO NODO
  281.     //===================================
  282.     static void EliminarUltimoNodo(ref NodoT RaizListaAlumnos)
  283.     {
  284.       if (RaizListaAlumnos == null)
  285.       {
  286.         Console.WriteLine("Lista Vacias,...");
  287.         Console.ReadLine();
  288.         Console.WriteLine("");
  289.       }
  290.       else
  291.       {
  292.         NodoT UltimoNodo = RaizListaAlumnos;
  293.         NodoT PenultimoNodo = UltimoNodo;
  294.         bool Salir = false;
  295.         while (!Salir && UltimoNodo != null)
  296.         {
  297.           if (UltimoNodo.Liga == null)
  298.           {
  299.             Salir = true;
  300.           }
  301.           else
  302.           {
  303.             PenultimoNodo = UltimoNodo;
  304.             UltimoNodo = UltimoNodo.Liga;
  305.           }
  306.         }
  307.         PenultimoNodo.Liga=null;
  308.       }
  309.     }
  310.     //===================================================
  311.     //METODO PARA ELIMINAR UN NODO "X" CON UNA REFERENCIA
  312.     //===================================================
  313.     static void EliminarNodoX(ref NodoT RaizListaAlumnos, string DatoReferencia)
  314.     {
  315.       if (RaizListaAlumnos == null)
  316.       {
  317.         Console.WriteLine("Lista Vacias,...");
  318.         Console.ReadLine();
  319.         Console.WriteLine("");
  320.       }
  321.       else
  322.       {
  323.         NodoT UltimoNodo = RaizListaAlumnos;
  324.         NodoT PenultimoNodo = UltimoNodo;
  325.         bool Salir = false;
  326.         //Condicision por si el primer nodo es el que se va a eliminar
  327.         //ya que hay es donde se encuentra el dato de referencia
  328.         if(UltimoNodo.Liga!=null&&UltimoNodo.Informacion==DatoReferencia)
  329.         {
  330.           EliminarPrimerNodo(ref RaizListaAlumnos);//se manda llamar al metodo de eliminar el primer nodo
  331.           return;
  332.         }
  333.         while (!Salir && UltimoNodo != null)
  334.         {
  335.           if (UltimoNodo.Informacion == DatoReferencia)
  336.           {
  337.             Salir = true;
  338.           }
  339.           else
  340.           {
  341.             PenultimoNodo = UltimoNodo;
  342.             UltimoNodo = UltimoNodo.Liga;
  343.           }
  344.         }        
  345.         PenultimoNodo.Liga=UltimoNodo.Liga;
  346.       }
  347.     }
  348.     //======================================================================================
  349.     //METOOD PARA RECORRER LA LISTA DE IZQ-DER E IR IMPRIMIENDO LOS ELEMENTO QUE HAY EN ELLA
  350.     //======================================================================================
  351.     static void ImprimirIzquierdoDerecho(NodoT Raiz)
  352.     {
  353.       while(Raiz!=null)
  354.       {
  355.         Console.WriteLine(Raiz.Informacion);
  356.         Raiz=Raiz.Liga;
  357.       }
  358.       Console.ReadLine();
  359.       Console.WriteLine("");
  360.     }
  361.     //===================================
  362.     //METODO DE FINALIZACION DEL PROGRAMA
  363.     //===================================
  364.     static void Finalizar()
  365.     {
  366.       Console.Write("Fin del Programa, Presiona una Tecla para Cerrar...");
  367.       Console.ReadLine();
  368.     }
  369.   }
  370. }
  371.  
COMPAÑEROS VENIMOS CONTENTOS A LAS VOZ DE NUESTRO CORAZON...CORAZON...
Y AL CARIÑO QUE TODO TENEMOS AL GLORIOSO PENTATHLON...PENTATHLON...