Вроде бы все работает правильно.
Если в листе еще остался элементы которые не проходили проверку мы же добавляем все в конец правильно или нет?
if(list.size() > 0)
for (String s : list)
first += " " + s;
package com.javarush.task.task22.task2209;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws Exception {
//...
BufferedReader reader0 = new BufferedReader(new InputStreamReader(System.in));
String file = reader0.readLine();//"C:/rukh.txt";
reader0.close();
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuilder builder = new StringBuilder();
String line = " ";
while ((line = reader.readLine()) != null) builder.append(line);
reader.close();
String words[] = builder.toString().split(" ");
StringBuilder result = getLine(words);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
StringBuilder builder = new StringBuilder();
if(words.length == 0 || words == null) return builder;
List<String> list = new ArrayList<>(Arrays.asList(words));
String first = list.remove(0);
int n = list.size();
for (int j = 0; j < n; j++){
for (int i = 0; i < list.size(); i++) {
if (first.substring(first.length() - 1).equalsIgnoreCase(list.get(i).substring(0, 1))) {
first += " " + list.get(i);
// System.out.println(first);
list.remove(i);
}
}
}
if(list.size() > 0)
for (String s : list)
first += " " + s;
builder.append(first);
return builder;
}
}