Kryptonit. Код не эффективный, зато простой. Если список состоит из нуля или одного элемента, возвращаем его. Иначе берём хвост списка и разделяем его по последнему индексу на часть, идущую до последнего элемента, и сам последний элемент. Кладём последний элемент перед этой частью, а первый - после.
im_noob, Да, теперь верно. Ещё осталось считвание строки исправить. Потому что сейчас у вас в строку размером 1 считывается строка размером больше 1. Это undefined behavior. Это обычно приводит к сегфолту. У меня, например, приводит
im_noob, А для чего написано в задании использовать указатели? Если заменить char *s на char s в InputSymbol, в неё все ещё будет передаваться указатель на строку char *Stri.