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;
}
Выше приведен код реверсивного реверсивного списка реверсирования. Я понял программу, но в конце * head_ref = rest; меня смущает. Позвольте мне уточнить это.Рекурсивное решение для реверсирования Связанный список
Давайте возьмем пример 1-> 2-> 3
in first recursion: first=1, rest=2
in second recursion: first=2, rest=3
in last recursion: first=3, rest=null
и с этого момента мы идем назад, и на каждом шаге мы относим * headRef = остальные , наконец, мы вернулись на первом этапе нашего остальное было 2 и мы относим * headRef = 2 , но нам нужно остальное пункт 3 не 2. Я уверен, что я пропускаю что-то здесь, но я не мог решить эту проблему, пожалуйста, помогите мне
Я попытался печатая адреса первых и остальных. image shows that after recursion, address of rest doesn't change
Заранее спасибо.
Вышеприведенный код от geeksforgeeks ... Там я прокомментировал, но никто мне не помог.
Я не понял ... Я написал это на бумаге. Вы можете видеть отсюда http: //imgur.com/Dfb46xD .... Там я четко описал свои сомнения. Пожалуйста, помогите мне разобраться ... –
вы можете видеть, что I K1, K2, K3, K4 - это адреса и добавлены «0» в конце для адреса Rest –
@LokeshS На вашей диаграмме * head_ref получит K4, потому что после возвращения из рекурсии Rest2 будет указывать на K4, т. е. * head_ref3 = rest2. и * head_ref3 = K4, как вы писали на диаграмме. –