К сожалению, у меня недостаточно репутации, чтобы оставлять комментарии, поэтому я собираюсь опубликовать ответ и надеюсь, что он вам поможет. Я собираюсь использовать картины для рисования, чтобы упростить визуализацию. Давайте начнем:
Допустим, у нас есть список 1-> 2-> 3->, поэтому он начинается так:
Теперь мы запускаем функцию, и она работает до тех пор, пока не доберется до первой рекурсии, где она начинается с новой головы, и у нас будет следующая ситуация:
Затем функция запускается снова, и мы получаем следующий результат:
Затем мы начинаем с нового заголовка (3), но здесь последняя функция возвращает заголовок, поскольку выполняется условие if
head->next == NULL
. Итак имеем:
Затем мы следуем функции до конца, изменяя head->next->next = head
и head->next = NULL
, поэтому имеем:
Затем функция возвращает узел, и мы возвращаемся к исходному вызову. Затем мы делаем те же шаги и получаем:
В конце функция возвращает узел, поэтому мы получаем:
Надеюсь, это поможет вам, и извините за низкое качество ответа, но мне легче решать рекурсию при его визуализации, а самый простой способ визуализации - рисовать.