Тут вроде бы все ясно создан список list хранящий все слова и Хэшсет для хранения уникальных значений
// пробегаем по всему списку слов
        for (String s : list) {
// создаем реверс текущего слова
            String r = new StringBuilder(s).reverse().toString();
//сравниваем есть ли в сете реверс
            if (set.contains(r)) {
//реверс есть, значит наш случай, добавляем в результирующий список и чистим сет
                result.add(new Pair(s, r));
                set.remove(r);
            } else {
//если в сете нет искомого реверса, то он мог быть удален при предыдущем сравнении
                set.add(r);
            }
        }
Тестовые данные:
рот тор торт о
о тот тот тот
о тот трот рот
тор о тор рот
тот тот а
а