Как расположить упорядоченный связанный список в алфавитном порядке в Java?

#java #list #sorting #linked-list

#java #Список #сортировка #связанный список

Вопрос:

У меня так много проблем с программой, над которой я работаю.

Предполагается, что программа распечатывает элементы упорядоченного связанного списка (поскольку для списка нет доступных установщиков) в алфавитном порядке. Вот что у меня есть:

GOrderedList — это узел, событие — это значение. У меня была идея попытаться найти слова и поместить их в arraylist в алфавитном порядке.

 public static ArrayList <String> sortEvents (GOrderedList <Event> C){

    //create arraylist 
    ArrayList <String>  sortedList = new ArrayList <String>(); 

    while (C.getNext()!=null){
        GOrderedList <Event> first = C.getNext();
        String highest = first.getValue().getname(); 

        while (first.getNext()!=null){
        if (first.getNext().getValue().getname().compareTo(highest)<0){
            highest=C.getNext().getValue().getname(); 
            }
            first=first.getNext(); 
        }
        sortedList.add(highest);
        C = C.getNext(); 
    }
  

Это создает список, что обнадеживает, но он не в порядке. У меня была идея разместить элементы в новом ArrayList в алфавитном порядке. Я мог бы поместить элементы в ArrayList, а затем отсортировать его, но я бы предпочел этого не делать.

Комментарии:

1. Он выдает неверный вывод? Какой результат он выдает? Какой результат вы ожидали?

2. Какова иерархия GOrderedList ? Вы не можете использовать Collections.sort() ?

3. Извините, с предоставленной вами информацией у нас нет никаких шансов вам помочь. Вопросы, требующие помощи в отладке («почему этот код не работает?»), должны включать желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для ее воспроизведения в самом вопросе. Вопросы без четкой формулировки проблемы не будут полезны другим читателям.

4. Это GOrderedList из NYU Computer Science? Ссылка

5. Это домашнее задание?

Ответ №1:

Вы можете использовать компаратор для его сортировки.Как показано ниже.

 public static ArrayList<String> sortEvents(GOrderedList<Event> C) {
        // create arraylist
        ArrayList<String> sortedList  = new ArrayList<String>();

        while (true) {
            GOrderedList<Event> first = C.getNext();
            if (first == null) {
                break;
            }
            String highest = first.getValue().getname();
            sortedList .add(highest);
        }
        Collections.sort(sortedList , new Comparator<String>() {
            public int compare(String f1, String f2) {
                return f1.toString().compareTo(f2.toString());
            }
        });

        return sortedList ;
    };
  

Ответ №2:

Есть несколько проблем с кодом:

  1. Вызов getNext() в цикле while будет увеличивать и пропускать значение каждый раз. Вероятно, вам нужно вызвать hasNext() метод.

  2. Каждая итерация внешнего цикла должна добавлять свой элемент в соответствующую позицию. Как написано, добавленная стоимость всегда будет в конце.

Как упоминалось ранее, существуют стандартные способы сделать это, но я предполагаю, что вам нужно сделать это в качестве упражнения. Если нет, используйте компаратор. Естественное сравнение строк может дать вам именно то, что вы хотите.

Комментарии:

1. Для 1., если я правильно угадал GOrderedList , getNext() не продвигается, просто возвращает ссылку на следующий узел (или null). Для 2., если список уже упорядочен, как следует из названия класса, это проблема только в том случае, если требуется другой порядок. Я бы хотел, чтобы OP сказал нам.

2. Вы правы в том, что GetNext() не продвигается вперед и возвращает только ссылку. Список уже упорядочен и не может быть переупорядочен сам по себе, но должен быть напечатан в алфавитном порядке, отсюда и вопрос. У меня была идея разместить элементы в новом ArrayList в алфавитном порядке. Я мог бы поместить элементы в ArrayList, а затем отсортировать его, но я бы предпочел этого не делать.