Impressão recursiva de uma lista de trás para a frente. Escreva uma função printListBackwards

que envie recursivamente os itens de uma lista de trás para a frente. Use sua função em um programa de teste que crie uma lista classificada de inteiros e imprima a lista em ordem reversa.

Passo 1

Criaremos uma função que imprimirá recursivamente a lista vinculada para trás.

Em primeiro lugar, vamos criar a estrutura do nó da lista vinculada:

struct listNode {

struct listNode* next;

int data;

};

typedef struct listNode ListNode;

typedef ListNode* ListNodePtr;

Passo 2

Para imprimir a lista de trás para frente, chamaremos recursivamente a função passando o próximo nó e definiremos a instrução print após a chamada. Assim, o último nó será o primeiro a chegar ao comando print, simulando uma saída para trás.

Primeiro, verifique se a lista foi inicializada:

void printListBackwards(ListNodePtr node)

{

if (node == NULL)

return;

...

}

Em seguida, chame recursivamente a função, passando o próximo nó.

void printListBackwards(ListNodePtr node)

{

...

printListBackwards(node->next);

...

}

Por fim, imprima os dados:

void printListBackwards(ListNodePtr node)

{

...

printf("%d ", node->data);

}

Passo 3

Na função principal, primeiro alocaremos e inicializaremos o nó da lista vinculada principal (raiz):

int main()

{

ListNodePtr head = malloc(sizeof(ListNodePtr));

head->data = 0;

head->next = NULL;

...

}

Então, vamos iterar 5 vezes (constante definida), inserindo novos nós na lista, fazendo uma lista ordenada crescente de 5 números:

int main()

{

...

for (int i = 1; i

{

ListNodePtr node = malloc(sizeof(ListNodePtr));

node->data = i;

node->next = NULL;

ListNodePtr p = head;

while (p->next != NULL)

p = p->next;

p->next = node;

}

...

}

Por fim, chame a função printListBackwards():

int main()

{

...

printListBackwards(head);

return 0;

}

Resposta

Ver o desenvolvimento.