}//busca coincidencias

        public void Buscar_posicion(string item)
        {
            int   count = 1;
            Lista ap    = this;

            if (!Vacia())
            {
                while (ap.elemento != item && ap.sig != null)
                {
                    ap = ap.sig;
                    count++;
                }
            }
            if (ap.elemento == item)
            {
                Console.WriteLine("El elemento {0} SI existe en la lista en el nodo {1}", item, count);
            }
            else
            {
                Console.WriteLine("El elemento {0} NO existe en la lista", item);
            }
        }
        public void Buscar_Nodo_Ocurrencia(string buscar)
        {
            Lista lis = this;
            int   pos = 1;

            if (!Vacia())
            {
                while (lis != null)
                {
                    if (lis.Elemento.Contains(buscar))
                    {
                        Console.WriteLine("'{0}' -> ESTA en el nodo {1}", buscar, pos);
                        break;
                    }
                    lis = lis.Siguiente;
                    pos++;
                }
                if (lis == null)
                {
                    Console.WriteLine("'{0}' -> NO ESTA en el nodo", buscar);
                }
            }
        }
        }//opcion 1

        static void Main(string[] args)
        {
            ConsoleKeyInfo menu = default(ConsoleKeyInfo), op; //para uso del menu
            int            pausa = 100;                        //pausa
            string         cad;                                //cadena de strings
            Lista          MiLista = new Lista();

            do
            {
                try
                {
                    Console.BackgroundColor = ConsoleColor.DarkBlue;
                    Console.Clear();
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("Presione: \n\nLlenar Lista -> [A]\n\nVer Lista -> [S]\n\nInsertar un nodo antes de otro conocido -> [D]");
                    Console.WriteLine("\nInsertar un nodo en una posición dada -> [F]\n\nBuscar la primera ocurrencia de una cadena -> [G]");
                    Console.WriteLine("\nBuscar la primera ocurrencia de una cadena \ne indicar en qué nodo de la lista se encuentra -> [H]");
                    Console.WriteLine("\nBuscar todas las ocurrencias de una cadena \ne indicar cuántas ocurrencias existen y en qué nodos se ubican -> [J]");
                    Console.WriteLine("\nBuscar la primera ocurrencia de una cadena\no sub-string de una cadena e indicar en qué nodo se encuentra -> [K]");
                    Console.WriteLine("\nSalir -> [ESC]");
                    menu = Console.ReadKey();
                    switch (menu.Key)
                    {
                    case ConsoleKey.A:
                    {
                        Thread.Sleep(pausa);
                        Llenar(MiLista);
                        break;
                    }

                    case ConsoleKey.S:
                    {
                        do
                        {
                            Console.Clear();
                            MiLista.DesplegarLista();
                            Console.WriteLine("\nPresione [Espacio] para salir");
                            op = Console.ReadKey();
                        } while (op.Key != ConsoleKey.Spacebar);        //lo hace hasta que el usuario presione espacio
                        break;
                    }

                    case ConsoleKey.D:
                    {
                        if (!MiLista.Vacia())
                        {
                            Thread.Sleep(pausa);
                            Console.Clear();
                            Console.WriteLine("Ingrese una nueva cadena: ");
                            cad = Console.ReadLine();
                            Console.WriteLine("Ingrese el elemento anterior: ");
                            string anterior = Console.ReadLine();
                            MiLista.InsertarAntes(cad, anterior);        // ingresa una cadena en un elemnto anterior
                        }
                        else
                        {
                            Console.Clear();
                            Console.WriteLine("Lista vacia");
                            Thread.Sleep(2000);
                        }

                        break;
                    }

                    case ConsoleKey.F:
                    {
                        if (!MiLista.Vacia())
                        {
                            Thread.Sleep(pausa);
                            Console.Clear();
                            Console.Write("Ingrese una nueva cadena: ");
                            cad = Console.ReadLine();
                            Console.Write("Ingrese la posición entre 0 y {0}: ", MiLista.Contar - 1);
                            byte pos = Convert.ToByte(Console.ReadLine());
                            MiLista.Insertar_posicion(pos, cad);        //ingresa la cadena en una posicion
                        }
                        else
                        {
                            Console.Clear();
                            Console.WriteLine("Lista vacia");
                            Thread.Sleep(2000);
                        }
                        break;
                    }

                    case ConsoleKey.G:
                    {
                        if (!MiLista.Vacia())
                        {
                            Thread.Sleep(pausa);
                            Console.Clear();
                            Console.Write("¿Qué elemento desea buscar?: ");
                            cad = Console.ReadLine();
                            do
                            {
                                Console.Clear();
                                MiLista.Buscar(cad);
                                Console.WriteLine("\nPresione [Espacio] para salir");
                                op = Console.ReadKey();
                            } while (op.Key != ConsoleKey.Spacebar);
                        }
                        else
                        {
                            Console.Clear();
                            Console.WriteLine("Lista vacia");
                            Thread.Sleep(2000);
                        }
                        break;
                    }

                    case ConsoleKey.H:
                    {
                        if (!MiLista.Vacia())
                        {
                            Thread.Sleep(pausa);
                            Console.Clear();
                            Console.Write("¿Qué elemento desea buscar?: ");
                            cad = Console.ReadLine();
                            do
                            {
                                Console.Clear();
                                MiLista.Buscar_posicion(cad);
                                Console.WriteLine("\nPresione [Espacio] para salir");
                                op = Console.ReadKey();
                            } while (op.Key != ConsoleKey.Spacebar);
                        }
                        else
                        {
                            Console.Clear();
                            Console.WriteLine("Lista vacia");
                            Thread.Sleep(2000);
                        }
                        break;
                    }

                    case ConsoleKey.J:
                    {
                        if (!MiLista.Vacia())
                        {
                            Thread.Sleep(pausa);
                            Console.Clear();
                            Console.Write("¿Qué elemento desea buscar?: ");
                            cad = Console.ReadLine();
                            do
                            {
                                Console.Clear();
                                MiLista.BuscarTodo(cad);
                                Console.WriteLine("\nPresione [Espacio] para salir");
                                op = Console.ReadKey();
                            } while (op.Key != ConsoleKey.Spacebar);
                        }
                        else
                        {
                            Console.Clear();
                            Console.WriteLine("Lista vacia");
                            Thread.Sleep(2000);
                        }
                        break;
                    }

                    case ConsoleKey.K:
                    {
                        if (!MiLista.Vacia())
                        {
                            Thread.Sleep(pausa);
                            Console.Clear();
                            Console.Write("¿Qué elemento desea buscar?: ");
                            cad = Console.ReadLine();
                            do
                            {
                                Console.Clear();
                                MiLista.Buscar_Nodo_Ocurrencia(cad);
                                Console.WriteLine("\nPresione [Espacio] para salir");
                                op = Console.ReadKey();
                            } while (op.Key != ConsoleKey.Spacebar);
                        }
                        else
                        {
                            Console.Clear();
                            Console.WriteLine("Lista vacia");
                            Thread.Sleep(2000);
                        }
                        break;
                    }

                    case ConsoleKey.Escape:    //salida
                    {
                        Console.Clear();
                        Console.WriteLine("Arigato");
                        Console.WriteLine("Presiona una tecla para salir");
                        Console.ReadKey();
                        break;
                    }
                    }
                }
                catch (Exception e)// algun error que no este incluido sera capturado por el catch
                {
                    Console.WriteLine(e.Message);
                    Console.ReadLine();
                }
            } while (menu.Key != ConsoleKey.Escape);
        }
 public Lista(string dato = null)//constructor
 {
     elemento = dato;
     sig      = null;
 }