Этот код с этого сайта.
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;
/* reverse the rest list and put the first element at the end */
recursiveReverse(&rest);
first->next->next = first;
/* tricky step -- see the diagram */
first->next = NULL;
/* fix the head pointer */
*head_ref = rest;
}
Я не понимаю, почему после последнего рекурсивного вызова значение rest остается прежним?Я понимаю, что recursiveReverse (& rest) передает фактический адрес отдыха, но разве этот адрес не используется только head_ref?Это означает, что каждый рекурсивный вызов имеет свою собственную локальную копию first и rest, и поэтому * head_ref = rest не должен работать, потому что значение rest будет постоянно меняться.
Где мое понимание не так?
Редактировать: Добавление некоторых моих каракулей.