Может кто-нибудь объяснить построчно что происходит в методе reverse()? Зачем переменная temp? Зачем size() делить на 2 в цикле? Зачем переменная n? И как вообще надо рассуждать в таких задачах (не важно задача с массивом или ArrayList'ом)? Кто разбирается, пожалуйста объясните "на пальцах".