2015-04-30 5 views
1

Я пытаюсь напечатать связанный список рекурсивно. Я создал свою собственную вспомогательную функцию для рекурсивной печати, и я называю ее своей основной функцией обратного вывода.Проблема со связанным списком рекурсивная обратная функция

Что произойдет, мой указатель на заголовок списка успешно перейдет к последнему элементу списка, но он сработает. Я не слишком уверен в том, что именно происходит здесь. Я проверил за пределами моего !=NULL. Я как бы проиграл, почему он не печатает его назад после того, как указатель был установлен в последнем целом. Вот мой код.

void lst_recursion(NODE *p){ 
    while (p != NULL){ 
     lst_recursion(p->next); 
     printf(FORMAT, p->val); 
    } 
} 

void lst_print_rev(LIST *l) { 
    NODE *p = l->front; 
    printf("["); 

    while (p!= NULL){ 
     lst_recursion(p); 
    } 
    printf("]\n"); 
} 

ответ

2

Во-первых, вам не нужен while цикл в любой этого. Основная точка входа должна выглядеть следующим образом:

void lst_print_rev(const LIST *l) 
{ 
    printf("["); 
    lst_recursion(l->front); 
    printf("]\n"); 
} 

И фактическая функция, предполагая, что список заканчивается нулем, должен выглядеть просто так:

void lst_recursion(const NODE *p) 
{ 
    if (p == NULL) 
     return; 

    lst_recursion(p->next); 
    printf(FORMAT, p->val); 
} 

Это рекурсию в хвост, сделать ничего нет в этом значении (NULL), затем отключите резервную копию стека активации, сообщая о каждом узле на выходе. Помните, что для рекурсивных алгоритмов нужны конкретные стратегии выхода, а они обычно a if условие ничего не делать и просто выйти из вызова

Удачи.

+0

Спасибо большое! Теперь я вижу, где я ошибался в использовании инструкции while. Я немного перепутал, но это помогло. – user3457828

Смежные вопросы