Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        public int GetQtd()
        {
            No  atual = this.primeiro;
            int ret   = 0;

            while (atual != null)
            {
                ret++;
                atual = atual.GetProx();
            }

            return(ret);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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());
        }
Пример #7
0
        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 + "]");
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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();
            }
        }