0

私のプログラムは、単語のリストを取得し、各単語を配列内の文字参照の下に昇順で格納することを目的としています。たとえば、AZ 単語の配列 apple、0 で参照される A の下のリンク リストの下の ape、25 で参照される Z の下の Zebra です。しかし、標準の first = new Node(word) を使用する場合、何も追加しません。私は絶望的に迷っています。

import java.util.LinkedList;
public class ArrayLinkedList 
{    
   /**
    The Node class is used to implement the 
    linked list.
   */

   private class Node
   {
      String value;
      Node next;

      /**
       * Constructor
       * @param val The element to store in the node
       * @param n The reference to the successor node
       */
      Node(String val, Node n)
      {
         value = val; 
         next = n;
      }
      Node(String val)
      {
          this(val, null);
      }
    }     

    private final int MAX = 26; // Number of nodes for letters
    private Node first;         // List head
    private Node last;          // Last element in the list
    private LinkedList[] alpha; // Linked list of letter references

    /**
    * Constructor to construct empty array list
    */

    public ArrayLinkedList()
    {
        first = null;
        last = null;
        alpha = new LinkedList[MAX];

        for (int i = 0; i < MAX; i++)
        {
            alpha[i] = new LinkedList();
        }
    }

    /**
     * arrayIsEmpty method
     * To check if a specified element is empty
     */
    public boolean arrayIsEmpty(int index)
    {
        return (alpha[index].size() == 0);  
    }

    /**
     * The size method returns the length of the list
     * @return The number of elements in the list
     */
     public int size() 
     {
          int count = 0;
          Node p = first;
          while (p != null)
          {
              // There is an element at p
              count++;
              p = p.next;
          }
          return count;
     }    

    /**
     * add method
     * Adds the word to the first position in the linked list
     */
    public void add(String e)
    {
        String word = e.toLowerCase();  // Put String to lowercase
        char c = word.charAt(0);        // to get first letter of string
        int number = c - 'a';           // Index value of letter

        // Find position of word and add it to list
        if (arrayIsEmpty(number)) 
        {
            first = new Node(word);
            first = last;
        }
        else
        {
            first = sort(first, word, number);
        }     
    }

    /**
     * nodeSort method
     * To sort lists
     */
    private Node sort(Node node, String value, int number) {
        if (node == null) // End of list
        { 
            return getNode(value, number);
        }
        int comparison = node.value.compareTo(value);
        if (comparison >= 0)  // Or > 0 for stable sort.
        {
            Node newNode = getNode(value, number); // Insert in front.
            newNode.next = node;
            return newNode;
        }
        node.next = sort(node.next, value, number); // Insert in the rest.
        return node;
}

    private Node getNode(String value, int number) 
    {
        return first.next;
    }
    /**
     * get method
     * to get each word value from the linked list and return it
     * @return value
     */

    public LinkedList get(int index)
    {
        return alpha[index];
    }

    public String toString()
    {
        StringBuilder sBuilder = new StringBuilder();

        sBuilder.append("Word and occurrence in ascending order\n\n");

        Node p = first;

        while (p != null)
        {
            sBuilder.append(p.value + "\n");            
            p = p.next;
        }
        return sBuilder.toString();     
    }
}
4

1 に答える 1