Итеративный способ обращения вспять связанного списка очень простой способ сделать. Я пытался понять рекурсивный путь, пройдя через ссылку нижеМаркировка головы ссылкой на хвост связанного списка
http://www.geeksforgeeks.org/write-a-function-to-reverse-the-nodes-of-a-linked-list/
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;
}
Мы первый переместить указатель на хвост связного списка. Во время размотки штабеля мы переставляем ссылки обратно. Но для всех вызовов разворачивания стека, * headref = rest. Так как первое изменение во время разворачивания стека к предыдущему значению стека, почему остальные не изменились. Я создал 4 узла и просмотрел значения через gdb. Остальные значения во время разматывания столов оставались постоянными, но первые значения менялись. Почему он не меняется.