Вызов рекурсии связанного списка по ссылке в C
Я практикуюсь со связанными списками, используя C. Я начинающий программист, только две недели назад начал изучать язык Си.
Я очень хорошо понимаю концепцию связанного списка и пытался перевернуть связанный список с помощью рекурсии.
Я знаю, как повернуть его вспять с помощью цикла while, однако с рекурсией я застрял на том, как указать головной указатель на адрес последнего номера вместо начального адреса первого номера после того, как я переверну список.
Ниже приведена моя обратная функция. Голова определена в main, и я вызываю ее по ссылке в свою функцию. Я знаю, что могу решить эту проблему, вызвав ее по значению и просто написав в main() head=reverse(node* head); или определив head в динамической памяти и просто получив доступ к ней прямо из функции. Я не хочу этого делать. Я хочу вызвать его по ссылке из main и функции, чтобы вернуть void.
Вот моя обратная функция:
void reverse(struct node** head) { struct node* p=*head; if(p->link==NULL) { *head=p; return; } reverse(&(p->link)); p->link->link=p; p->link=NULL; }
Скажем, список таков: 5 6 7 2 3 4 выход, который я получаю после обратного, равен: 5
Спасибо!
Что я уже пробовал:
Я знаю, что причина в том, что голова все еще указывает на адрес с первым номером. Я не могу понять, как указать его на последний номер адреса. Он должен был сделать это в операторе if, когда он нарушает функцию рекурсии. Но это не работает.