Как изменить порядок связанного списка? - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь выполнить задание о связанном списке, к сожалению, я не могу опубликовать свой код в Интернете. Но общая проблема выглядит так:

У меня есть связанный список организмов: список -> Зебра -> Гиена -> Лев -> трава

Но я хочу, чтобы список отображался по порядку (пищевая цепочка): orderList -> Лев -> Гиена -> Зебра -> трава

Кроме того, я могу добавить в список организм, например

list.add("T-Rex");

Итак, мой желаемый результат должен быть упорядоченнымСписок -> T-Rex -> Лев -> Гиена -> Зебра -> трава

Как добавить организмы, а затем упорядочить их так, чтобы отображалась иерархия? Существует ограниченное количество организмов, которые я могу уничтожить, поэтому я точно знаю, куда их поместить. Например, я знал, что если я поставлю T-Rex, он всегда будет на вершине Льва, гиена всегда будет раньше, чем трава ... и так далее ... Я пытался найти учебники на YouTube и Google но они в основном сортировали числа или строки в алфавитном порядке, что, на мой взгляд, не помогает моей проблеме.

Буду признателен за любую помощь, так как это мой первый раз связанный список.

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

Вы можете использовать

add(int index, E element);

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

list.add(0,"T-Rex");
0 голосов
/ 10 апреля 2020

Я бы сделал это следующим образом:

Создайте класс Organism, который реализует Comparable и имеет собственный естественный порядок упорядочения c для вашего класса.

public class Organism implements Comparable<Organism> {
    private Integer hierarchy;
    private String name;

    public Organism (String nameArg, Integer hierarchyArg) {
         name = nameArg;
         hierarchy = hierarchyArg;
    }

    public Integer getHierarchy() {
        return hierarchy;
    }

    public String getName() {
        return name;
    }

    @Override
    public int compareTo(Organism a) 
    {
        return this.getHierarchy().compareTo( a.getHierarchy() );
    }
}

Теперь я могу добавить в список в любом порядке:

//Put a big gap between the numbers so if you need later you can add more organisms in between 
list.add(new Organism("T-Rex", 1000));
list.add(new Organism("Zebra", 10));
list.add(new Organism("Lion", 500));
list.add(new Organism("Hyena", 200));

И затем вы можете использовать Java для их сортировки:

// Java old way of sorting. It will modify the 'list' itself
Collections.sort(list); 

//Java 8+ way of sorting. It does not modify the 'list' but create a new one.
List<String> sortedList = list.stream().sorted().collect(Collectors.toList());

Документация для сопоставимого интерфейса: https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

Удачи!

0 голосов
/ 10 апреля 2020

Вы можете сопоставить каждое животное в вашем списке с каким-либо значением уровня иерархии, e.g: T-Rex - 1, Lion - 2, .... Затем вы можете поместить все значения в LinkedList и отсортировать их с помощью специального компаратора или в качестве альтернативы очереди приоритетов.

В результате вы упорядочите иерархию в своем списке. Пример:

class Organism {
    String name;
    int level;

    public Organism(String name, int level) {
         ...
    }
}
PrioriQueue q = new PriorityQueue(...custom_comparator...);
q.add(...add_all_organism_here....)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...