La création de push et pop méthodes à l'intérieur d'un utilisateur défini LinkedList

Récemment, ma classe a été l'étude de ArrayLists et LinkedLists. La semaine dernière nous avons reçu une mission qui nous a demandé de créer push et pop méthodes au sein de notre LinkedList classe de pile. Je comprends la logique derrière les piles tel qu'il est last-in-first-out, mais j'ai de la difficulté avec le code réel. Je suis assez nouveau à l'informatique (ce qui est mon deuxième cours jamais) et ce travail particulier est littéralement en me faisant tirer mes cheveux. J'ai déjà fait cette mission, mais nous avons une mi-parcours de la semaine prochaine et je voudrais faire du bien. J'ai été sur le web et mon manuel à la recherche de l'aide, mais rien. Mon professeur ne se réfère qu'à moi de la TA et de la TA est le seul souci de m'aider avec la logique, pas le code. Je vais poster les instructions de mon professeur m'a donné ci-dessous, ainsi que mon code jusqu'à présent. Merci à l'avance.

Du professeur:

Mettre en œuvre les piles en utilisant le modèle donné dans la suite de Java
fichiers:

CS401StackInterface.java CS401StackLinkedListImpl.java

public interface CS401StackInterface<E>
{
   /**
    * Get the top element on the stack.
    * 
    * @return the first element on the stack.
    */
   public E pop();

   /**
    * Adds an element on the top of the stack.
    * 
    * @param e - The element to be added to the stack.
    */
   public void push(E e);

   /**
    * Determines the number of elements in this data structure.
    * 
    * @return the number of elements currently resident in this
    *         data structure.
    */
   public int size();
}

Ici est la classe où je tente de définir mes méthodes:

public class CS401StackLinkedListImpl<E> implements CS401StackInterface<E> 
{
    private LinkEntry<E> head;
    private int num_elements;

    public CS401StackLinkedListImpl()
    {
        head = null;
        num_elements = 0;
    }

    public void setElement(LinkEntry<E> anElement){
        head = anElement;
    }

    /*Append the new element to the end of the list*/
    public void push(E e)
    {
        LinkEntry<E> temp = new LinkEntry<E>();
        temp.element = e;
        temp.next = head;
        head = temp;
    }

    /*Remove the most recently pushed element at the end of the list*/
    public E pop()
    {
        head.next = head;
        num_elements--;
        return (E) head;
    }

    public int size()
    {
        LinkEntry<E> temp = new LinkEntry<E>();
        for (temp = head; head != null; head = head.next)
            num_elements++;
        return num_elements;
    }

    public String toString()
    {
        String string = "";
        LinkEntry<E> temp = new LinkEntry<E>();
        for (temp = head; temp != null; temp = temp.next)
        {
            string += temp.element.toString() + "";
        }
        return string;
    }

/* ------------------------------------------------------------------- */
/* Inner classes                                                      */
    protected class LinkEntry<E>
    {
        protected E element;
        protected LinkEntry<E> next;

        protected LinkEntry() { element = null; next = null; }
    }
}

Enfin, ici, c'est ma classe principale où je test mes méthodes:

import java.util.*;

public class App {

    public static <E> void main(String[] args) {

        CS401StackLinkedListImpl<String> my_stack = new CS401StackLinkedListImpl<String>();
        my_stack.push("Brian");
        my_stack.push("Chris");
        my_stack.push("Joe");
        System.out.println("Stack size: " + my_stack.size());
        my_stack.pop();
        System.out.println("Stack size: " + my_stack.size());
        my_stack.toString();
    }

}

Quand je lance ma classe principale c'est de quoi il en retourne:

Stack size: 3
Exception in thread "main" java.lang.NullPointerException
    at week6.CS401StackLinkedListImpl.pop(CS401StackLinkedListImpl.java:30)
    at week6.App.main(App.java:66)

Tout ce que j'ai rencontré m'a juste dit de créer une nouvelle Pile, ce qui est facile, car alors je n'ai pas à vous soucier de les "entrailles" du code, mais ce n'est pas ce dont j'ai besoin. Merci.

Votre NullPointerException est à la ligne 30, mais vous avez collé votre extrait sans forfait ou les importations. Ligne en ligne 30?
La ligne avec le menu d'appel.
Je recommande également que vous devez utiliser num_elements++ dans votre méthode push. De cette façon, vous savez toujours combien d'éléments sont dans votre pile de sorte que votre méthode de dimensionnement pouvez simplement retourner num_elements et n'ont pas à essayer de calculer.
En fait, vous allez très bien.. Si c'est votre 2ème cours..
On dirait que vous faites assez bien. Ce que l'environnement de développement que vous utilisez? Quoiqu'il en soit, je vous suggère fortement d'apprendre à utiliser tous les outils de débogage qui vous est disponible. Cela vous permettra de regarder les valeurs des variables dans votre code et vous aider à dépister les problèmes.

OriginalL'auteur Brian | 2012-10-05