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.