// exercicio 3

        public void CasamentoCom(ListaSimples <Dado> outra,
                                 ref ListaSimples <Dado> nova)
        {
            nova = new ListaSimples <Dado>();
            NoLista <Dado> a = null,
                           b = null;

            while (!this.EstaVazia && !outra.EstaVazia)
            {
                a = this.primeiro;
                b = outra.primeiro;

                if (a.Info.CompareTo(b.Info) < 0)
                {
                    this.quantosNos--;
                    this.primeiro = this.primeiro.Prox; // avança na lista 1
                    nova.InserirAposFim(a);
                }
                else
                if (b.Info.CompareTo(a.Info) < 0)
                {
                    outra.quantosNos--;
                    outra.primeiro = outra.primeiro.Prox; // avança na lista 2
                    nova.InserirAposFim(b);
                }
                else
                {
                    this.quantosNos--;
                    outra.quantosNos--;
                    this.primeiro  = this.primeiro.Prox;  // avança na lista 1
                    outra.primeiro = outra.primeiro.Prox; // avança na lista 2
                    nova.InserirAposFim(a);
                }
            }
            if (!this.EstaVazia) // não acabou a lista 1
            {
                nova.ultimo.Prox = this.primeiro;
                nova.ultimo      = this.ultimo;
                nova.quantosNos += this.quantosNos;
            }

            if (!outra.EstaVazia)
            {
                nova.ultimo.Prox = outra.primeiro;
                nova.ultimo      = outra.ultimo;
                nova.quantosNos += outra.quantosNos;
            }

            this.primeiro   = this.ultimo = null;
            this.quantosNos = 0;

            outra = new ListaSimples <Dado>();
        }
        public void Ordenar()
        {
            ListaSimples <Dado> ordenada     = new ListaSimples <Dado>();
            NoLista <Dado>      menorDeTodos = null,
                                antesDoMenor = null;

            while (!this.EstaVazia)
            {
                ProcurarMenorDado(ref menorDeTodos, ref antesDoMenor);

                NoLista <Dado> novoNo = menorDeTodos;
                this.RemoverNo(ref menorDeTodos, ref antesDoMenor);

                ordenada.InserirAposFim(novoNo);
            }
        }