Не могу понять как работает цикл for в методе doubleValues, объясните пожалуйста?! Вывод должен быть вида: дедушка дедушка бабушка бабушка папа папа мама мама сын сын дочь дочь коты коты собака собака программа программа машина машина
public class Solution {
    public static void main(String[] args) throws Exception {
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<String> list = new ArrayList();
        for(int i = 0; i<10; i++){
            list.add(read.readLine());
        }// Считать строки с консоли и объявить ArrayList list тут

        ArrayList<String> result = doubleValues(list);

        result.forEach(System.out::println);// Вывести на экран result
    }

    public static ArrayList<String> doubleValues(ArrayList<String> list) {
        ArrayList<String> list1 = new ArrayList<String>(list);
        for(int i = list.size(); i-- > 0;)
        list1.add(i, list.get(i));//напишите тут ваш код
        return list1;
    }
}
И почему, если мы вынесем декремент из условия, то опять таки вывод уже будет другой?
public static ArrayList<String> doubleValues(ArrayList<String> list) {
      ArrayList<String> list1 = new ArrayList<String>(list);
      for(int i = list.size(); i > 0; i--)
      list1.add(i, list.get(i));//напишите тут ваш код
      return list1;
  }