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.

Eliminar el valor más grande de una lista enlazada

Entonces lo he mencionado en el título, quiero eliminar el valor más grande de un LinkedList, pero no puedo entender exactamente cómo hacerlo. Intenté esto pero obtengo un error.

java
// Eliminar "n" de la lista 'first'
public static void Remove(Node<int> first, Node<int> n)
{
Node<int> pos = first;
while (pos.GetNext() != n)
pos = pos.GetNext();
pos.SetNext(n.GetNext());
}
public static void DeleteMaxValue(Node<int> first)
{
int max = 0;
Node<int> pos = first;
Node<int> maxNode = null;
while(pos.GetNext() != null)
{
if (pos.GetNext().GetValue() > max)
{
maxNode = new Node<int>(pos.GetNext().GetValue());
}
pos = pos.GetNext();
}
Remove(first, maxNode);
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que cuando se encuentra un valor máximo, se crea un nuevo nodo con el valor de ese máximo en lugar de almacenar una referencia al nodo en sí. Por lo tanto, cuando se llama a la función Remove, no puede encontrar el nodo ya que es una nueva instancia.

    Para solucionar este problema, en lugar de crear un nuevo nodo, debemos almacenar una referencia al nodo en sí. Aquí está la función DeleteMaxValue actualizada:

    public static void DeleteMaxValue(Node<int> first)
    {
        int max = int.MinValue; // inicializar max con el valor entero más pequeño posible
        Node<int> pos = first;
        Node<int> maxNode = null;
        while (pos.GetNext() != null)
        {
            if (pos.GetNext().GetValue() > max)
            {
                max = pos.GetNext().GetValue();
                maxNode = pos.GetNext(); // almacenar referencia al nodo en sí
            }
            pos = pos.GetNext();
        }
        Remove(first, maxNode); // llamar a Remove con la referencia al nodo
    }
    

    En este código actualizado, inicializamos max con el valor entero más pequeño posible para asegurarnos de que el primer valor encontrado siempre se considere como el máximo. También almacenamos una referencia al nodo en sí en maxNode. Finalmente, pasamos la referencia a la función Remove para eliminar el nodo con el valor máximo.

Comments are closed.