Я смотрел код ниже из библиотеки stanford:
void recursiveReverse(struct node** head_ref)
{
struct node* first;
struct node* rest;
/* empty list */
if (*head_ref == NULL)
return;
/* suppose first = {1, 2, 3}, rest = {2, 3} */
first = *head_ref;
rest = first->next;
/* List has only one node */
if (rest == NULL)
return;
/* put the first element on the end of the list */
recursiveReverse(&rest);
first->next->next = first;
/* tricky step -- see the diagram */
first->next = NULL;
/* fix the head pointer */
*head_ref = rest;
}
То, что я не понимаю, находится на последнем рекурсивном шаге, например, если список равен 1-2-3-4. Теперь для последнего рекурсивного шага сначала будет 1, а rest будет равно 2. Поэтому, если вы установите * head_ref = отдых.. что делает руководитель списка 2?? Может кто-нибудь объяснить, как после реверса глава списка становится 4??