Как переупорядочить двусвязный список, чтобы он соответствовал порядку массива с теми же элементами? - PullRequest
1 голос
/ 23 февраля 2020

Я пытаюсь обновить порядок моего двусвязного списка на основе массива с теми же элементами в обновленном порядке.

Например, если у меня есть:

cat->dog->rabbit->panda

И Я хочу изменить порядок, чтобы иметь порядок массива:

String[] pets = {"dog", "rabbit", "panda", "cat"};

Для контекста: я новичок в Java и программировании в целом, поэтому не уверен, как это сделать. По сути, то, что я делаю, - это то, что я перетасовал элементы рассадки, а двусвязный список - это не смешанная версия этих студентов. Я просто хочу обновить двусвязный список, чтобы он соответствовал порядку новой перемешанной версии. Мне нужна функция, которая может это делать.

У меня есть методы для доступа к последним и первым элементам двусвязного списка и возможность go влево или вправо от одного элемента. Я хочу сделать это с элементарными знаниями, без использования карт и прочего. Извините, если это звучит как хлопот, я просто хочу понять, что происходит!

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Если ваш класс связанного списка имеет те же операции, что и стандартный LinkedList, вы можете создать карту питомцев с их индексами в массиве:

Map<String, Integer> arrayIndices =
    IntStream.range(0, pets.length)
        .boxed()
        .collect(Collectors.toMap(i -> pets[i], i -> i));

Затем отсортировать список с помощью специального компаратора сортирует по индексу массива:

linkedList.sort(Comparator.comparing(arrayIndices::get));
0 голосов
/ 23 февраля 2020

Вместо создания мам и последующего сравнения я бы объявил массив с ожидаемым порядком:

String[] order = {"cat","dog","rabbit","panda"};

Затем я бы проследил алгоритм сортировки, вот пример (очень простой):

for (int i=0; i < pets.length(); i++){
    for (int k=0, k < order.length(); k++){
        if (pets[i] == order[k]){
            if (i != k){
                String store = pets[k];
                pets[k] = pets[i];
                pets[i] = store;
            }else{
                // Proper position
            }
        }
    }
}

Это займет больше времени, чем то, что ответил markovv; однако вам не нужно погружаться в Карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...