#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
struct ListNode *next;
char ch;
};
void
printList(const struct ListNode *listNode)
{
for (; listNode; listNode = listNode->next) {
putchar(listNode->ch);
}
}
void
printListReverse(const struct ListNode *listNode)
{
if (!listNode) {
return;
}
printListReverse(listNode->next);
putchar(listNode->ch);
}
int
main(void)
{
// begin with empty list
struct ListNode *list = 0;
char ch;
while ((ch = getchar()) != '\n') {
struct ListNode *p = malloc(sizeof(*p));
// normally we would check if p is the null pointer
// prepend to current list
p->next = list;
p->ch = ch;
list = p;
}
printf("calling: printList(list)\n");
printList(list);
putchar('\n');
printf("calling: printListReverse(list)\n");
printListReverse(list);
putchar('\n');
}