Страшноватый алгоритм...
Сначала создаём строку, содержащую всю информацию из списка (то есть, нас вообще не волнует, что где-то была структура "список" - мы его убиваем, чтобы потом построить заново из сырых данных)...
Потом превращаем строку в массив из строк! С помощью Split, разделяя её по пробелам!!! Зачем? Почему сразу не заполнить массив строк? А если строки в списке будут сами содержать пробелы, как "Новый список:"?
Потом разворачиваем этот массив! Зачем? А потому, что нас не научили вставлять элементы в конец списка, мы можем вставить их только в начало. Проходить массив в обратном порядке, вероятно, тоже не умеем.
Потом, уже при построении списка, у нас вызывается загадочная функция addNode(). Что она делает - неизвестно, поскольку, если бы она вставляла новый элемент после current - её бы вызвали ещё в двух местах кода, а не писали бы её код в развёрнутом виде.
И, наконец, независимо от того, что делает addNode(), элемент tt[n+1] будет вставлен в список дважды.
static Node SwapFirst(Node c) {
if(c==null || c.next==null) return c;
Node result=c.next;
c.next=result.next;
result.next=c;
return result;
}
public static Node reverseMyList (Node c,int n) {
if(n==0) return SwapFirst(c);
Node d=c;
for(;n>1 && d.next!=null;n--) d=d.next;
if(n==1) d.next=SwapFirst(d.next);
return c;
}