public ListaSimples <Dado> Juntar( ListaSimples <Dado> outra) { var lista3 = new ListaSimples <Dado>(); this.atual = this.primeiro; outra.atual = outra.primeiro; NoLista <Dado> aux = null; while (this.atual != null && outra.atual != null) { if (this.atual.Info.CompareTo( outra.atual.Info) < 0) { aux = this.atual.Prox; lista3.InserirAposFim(this.atual); this.atual = aux; this.quantosNos--; } else if (outra.atual.Info.CompareTo( this.atual.Info) < 0) { aux = outra.atual.Prox; lista3.InserirAposFim(outra.atual); outra.atual = aux; outra.quantosNos--; } else { aux = this.atual.Prox; lista3.InserirAposFim(this.atual); this.atual = aux; outra.atual = outra.atual.Prox; this.quantosNos--; outra.quantosNos--; } } // while if (lista3.ultimo != null) // se houve casamento { if (this.atual == null) // acabou o percurso da lista1 { lista3.ultimo.Prox = outra.atual; lista3.ultimo = outra.ultimo; lista3.quantosNos += outra.quantosNos; } else { lista3.ultimo.Prox = this.atual; lista3.ultimo = this.ultimo; lista3.quantosNos += this.quantosNos; } } this.primeiro = this.ultimo = outra.primeiro = outra.ultimo = null; this.quantosNos = outra.quantosNos = 0; return(lista3); }
public void ordenar() { ListaSimples <Dado> ordenada = new ListaSimples <Dado>(); while (!this.EstaVazia) { // achar o menor de todos // remover o menor de todos // incluir o menor de todos já removido na lista ordenada } this.primeiro = ordenada.primeiro; this.ultimo = ordenada.ultimo; this.quantosNos = ordenada.quantosNos; }
public void SepararEmDuasListas( ref ListaSimples <Dado> l1, ref ListaSimples <Dado> l2) { l1 = new ListaSimples <Dado>(); l2 = new ListaSimples <Dado>(); while (!this.EstaVazia) { atual = this.primeiro; NoLista <Dado> aux = atual.Prox; if (atual.Info.Separar()) { l2.InserirAposFim(atual); } else { l1.InserirAposFim(atual); } this.primeiro = aux; this.quantosNos--; } this.ultimo = null; }