2013-09-25 4 views
0

Моя программа предназначена для того, чтобы взять список слов и сохранить каждое слово под ссылкой на букву в массиве в порядке возрастания. Например, массив слов A-Z apple, ape под связанным списком под A, на который ссылается 0, Zebra под Z, на который ссылается 25. Но когда я использую стандарт 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();  
    } 
} 
+0

Нужно ли это быть массивом или вы можете использовать другие коллекции? –

+0

Вы должны попытаться скомпилировать этот первый ... Это даже не скомпилировалось. 'alpha [number] = новый узел (слово, первый);' alpha [number] - LinkedList, а не узел. Это назначение невозможно. Компилятор должен сказать вам об этом. Кроме того, у вас есть одна «первая» и одна «последняя» переменная, но у вас есть 26 связанных списков. В методе добавления вы обрабатываете первую и последнюю переменные, как если бы они были атрибутами только связанного списка, который в настоящее время редактируется (alpha [index]). Это кажется немного подозрительным. Если это так, вы должны, вероятно, иметь один «первый» и «последний» для каждого связанного списка. – Alderath

+0

У вашего кода мало проблем с дизайном. Одно из предложений, которое у меня есть, - это не сделать класс узла приватным, сделать его общедоступным и иметь частный список Node в классе ArrayLinkedList. – codeMan

ответ

0

Есть ли причина, по которой вы это делаете. Я могу придумать более простой способ: использовать карту, которая будет отображать символ (например, «A») в LinkedList of Words.

+0

К сожалению, мое задание позволяет мне использовать массив связанных списков для хранения английских слов в порядке возрастания. но для ссылки на буквы a-z на число a = 0, b = 1, z = 25. –

Смежные вопросы