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); } }