es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo lograr que mi implementación de LinkedList simple se agregue al final.

Para explicarlo, lo que estoy intentando es agregar una Persona al final de la lista enlazada. Pero no puedo hacerlo debido a una excepción que se arroja en la línea: if(current.Next == null)

La excepción es:
“System.NullReferenceException: ‘Referencia a objeto no establecida como instancia de un objeto.'”

Aquí está el código:

  public void Insert(Persona p)
    {
        Nodo aInsertar = new Nodo();
        aInsertar.Dato = p;
        if(count == 0)
        {
            cabeza = new Nodo();
            cabeza.Dato = p;
            cabeza.Siguiente = null;
        }
        else
        {
            Nodo actual = new Nodo();
            actual = cabeza.Siguiente;
            if(actual == null)
            {
                cabeza.Siguiente = aInsertar;
            }
            else
            {
                do
                {
                    actual = actual.Siguiente;
                    if(actual.Siguiente == null)
                    {
                        actual = aInsertar;
                        break;
                    }
                } while (actual.Siguiente != null);

            }
        }
        count++;
    }

Si alguien pudiera ayudarme, explicando quizás por qué mi código no tiene sentido y por qué recibo la excepción. Saludos.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la línea current = head.Next; donde estás estableciendo current como null porque head.Next es null. Esto significa que current se convierte en null y la declaración if(current.Next == null) causa la NullReferenceException ya que current es null y no tiene una propiedad Next.

    Para solucionar esto, necesitas establecer current como head en lugar de head.Next ya que head siempre es el primer elemento de la lista enlazada. Así que reemplaza la línea current = head.Next; con current = head;.

    Además, en el bucle do-while, necesitas establecer current.Next como el nuevo nodo toBeInserted en lugar de establecer current como toBeInserted. Así que reemplaza la línea current = toBeInserted; con current.Next = toBeInserted;.

    El código actualizado debería verse así:

    public void Insert(Person p)
    {
        Node toBeInserted = new Node();
        toBeInserted.Data = p;
        if(count == 0)
        {
            head = new Node();
            head.Data = p;
            head.Next = null;
        }
        else
        {
            Node current = head;
            while(current.Next != null)
            {
                current = current.Next;
            }
            current.Next = toBeInserted;
        }
        count++;
    }
    

    Esto debería insertar correctamente el nuevo nodo al final de la lista enlazada.

Comments are closed.