Это 4 попытка переписать решение, чтобы принял валидатор, и костылей тут столько, что можно снабдить целую больницу. Но все-таки, что не так? Со всеми протестированными вариантами отрабатывает. Находит самую длинную цепочку из возможных.
package com.javarush.task.task22.task2209;


import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;

/*
Составить цепочку слов
*/
public class Solution {
    public static void main(String[] args) {
        String string = null;
        Scanner scanner = new Scanner(System.in);
        File file = new File(scanner.nextLine());
        Path path = file.toPath();
        try {
            string = Files.readAllLines(path).toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String[]strings = string.split(" ");
        Arrays.sort(strings);


        //...
        StringBuilder result = getLine(strings);
        System.out.println(result.toString());
    }

    public static StringBuilder getLine(String... words) {
//фиктивное использование стрингбилдера
        StringBuilder sb = new StringBuilder("a");

        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < words.length; i++) {
            list.add(words[i]);
        }
        Collections.sort(list);

        //fin - самая длинная строка на данный момент
        String fin = "";
        //current - текущая строка
        String current = "";
        for (int k = 0; k < list.size(); k++) {

            //клонируем исходный массив и будем работать с ним(каждый раз заново)
            list.add(list.get(0));
            list.remove(0);
            List<String> copy = (ArrayList<String>)list.clone();

            //проходим аглоритм, ставя каждое из возможных слов на первое место

            current = copy.get(0);
            while (copy.size() > 1) {
                boolean findNextFord = false;
                String a = copy.get(0);
                char ch = a.charAt(a.length() - 1);
                String cha = String.valueOf(ch).toLowerCase();
                for (int j = 1; j < copy.size(); j++) {
                    if (String.valueOf(copy.get(j).charAt(0)).toLowerCase().equals(cha)) {
                        current += " " + copy.get(j);
                        copy.set(0, copy.get(j));
                        copy.remove(j);
                        findNextFord = true;
                        break;
                    }
                }
                if(findNextFord == false) break;
            }
            //проверяем, длиннее ли полученная цепочка, чем максимальная на данный момент
            if (current.split(" ").length >= fin.split(" ").length) {
                fin = current;
            }
        }
        return sb = new StringBuilder(fin);
    }
}