public Lista(Lista <X> modelo) { if (modelo == null) { throw new Exception("Modelo ausente"); } if (modelo.primeiro == null) { return; // sai do construtor, pq this.primeiro ja é null } this.primeiro = new No(modelo.primeiro.GetInfo()); No atualDoThis = this.primeiro; No atualDoModelo = modelo.primeiro.GetProx(); while (atualDoModelo != null) { atualDoThis.SetProx(new No(atualDoThis, atualDoModelo.GetInfo(), null)); atualDoThis = atualDoThis.GetProx(); atualDoModelo = atualDoModelo.GetProx(); } this.ultimo = atualDoThis; }
public void InvertaSe() { if (this.primeiro == null) { return; } if (this.primeiro.GetProx() == null) { return; } No backup, atual = this.primeiro; while (atual != null) { backup = atual.GetProx(); atual.SetProx(atual.GetAnte()); atual.SetAnte(backup); atual = backup; } backup = this.primeiro; this.primeiro = this.ultimo; this.ultimo = backup; }
public int GetQtd() { No atual = this.primeiro; int ret = 0; while (atual != null) { ret++; atual = atual.GetProx(); } return(ret); }
public override int GetHashCode() { int ret = 797; for (No atual = this.primeiro; atual != null; atual = atual.GetProx()) { ret = 5 * ret + atual.GetInfo().GetHashCode(); } if (ret < 0) { ret = -ret; } return(ret); }
public override bool Equals(object obj) { if (this == obj) { return(true); } if (obj == null) { return(false); } if (this.GetType() != obj.GetType()) { return(false); } Lista <X> lista = (Lista <X>)obj; No atualThis = this.primeiro; No atualLista = lista.primeiro; while (atualThis != null && atualLista != null) { if (!atualThis.GetInfo().Equals(atualLista.GetInfo())) { return(false); } atualThis = atualThis.GetProx(); atualLista = atualLista.GetProx(); } if (atualThis != null) { return(false); } if (atualLista != null) { return(false); } return(true); }
public X GetPos(int pos) { if (this.primeiro == null) { throw new Exception("Nada a obter"); } No atual = this.primeiro; int ret = 1; while (atual != null && ret <= pos) { ret++; atual = atual.GetProx(); } return(atual.GetInfo()); }
public override string ToString() { string ret = "["; No atual = this.primeiro; while (atual != null) { ret = ret + atual.GetInfo(); if (atual != this.ultimo) { ret = ret + ","; } atual = atual.GetProx(); } return(ret + "]"); }
public bool Tem(X i) { if (i == null) { throw new Exception("Informacao ausente"); } No atual = this.primeiro; while (atual != null) { if (i.Equals(atual.GetInfo())) { return(true); } atual = atual.GetProx(); } return(false); }
public Lista <X> Inversao() { Lista <X> ret = new Lista <X>(); for (No atual = this.primeiro; atual != null; atual = atual.GetProx()) { ret.primeiro = new No(null, atual.GetInfo(), ret.primeiro); if (ret.primeiro.GetProx() != null) { ret.primeiro.GetProx().SetAnte(ret.primeiro); } ret.primeiro.SetAnte(null); if (ret.ultimo == null) { ret.ultimo = ret.primeiro; } } return(ret); }
public void Remova(X i) { if (i == null) { throw new Exception("Informacao ausente"); } if (this.primeiro == null) { throw new Exception("Lista vazia"); } if (i.Equals(this.primeiro.GetInfo())) { this.primeiro = this.primeiro.GetProx(); if (this.primeiro == null) { this.ultimo = null; } else { this.primeiro.SetAnte(null); } return; } No atual = this.primeiro; for (;;) { if (atual == null) { throw new Exception("Informacao inexistente"); } if (i.Equals(atual.GetInfo())) { if (atual == this.primeiro) { this.primeiro = this.primeiro.GetProx(); if (this.primeiro == null) { this.ultimo = null; } else { this.primeiro.SetAnte(null); } return; } if (atual == this.ultimo) { this.ultimo = this.ultimo.GetAnte(); if (this.ultimo == null) { this.primeiro = null; } else { this.ultimo.SetProx(null); } return; } atual.GetAnte().SetProx(atual.GetProx()); atual.GetProx().SetAnte(atual.GetAnte()); return; } atual = atual.GetProx(); } }