#include
typedef int Element;
typedef struct LinkListType
{
Element data;
struct LinkListType * next;
} LinkList ;
//reverse a link list recursively
LinkList * reverse(LinkList * pre, LinkList * cur)
{
if(!cur)
return pre;
LinkList * head = reverse(cur, cur->next);
cur->next = pre;
return head;
}
int main()
{
int i;
LinkList *head = NULL, * pre=NULL, * cur=NULL;
//initial a link list
for(i=0; i<12; i++)
{
cur = (LinkList*)malloc(sizeof(LinkList));
if(!head)
head = cur;
cur->data = i;
cur->next = NULL;
if(pre)
pre->next = cur;
pre = cur;
}
cur = head;
//print the original list to stdout
while(cur)
{
printf("%d -> ", cur->data);
cur = cur->next;
}
printf("#/n");
//reverse the link list
head = reverse(NULL, head);
//print the reversed link list to stdout
while(head)
{
printf("%d -> ", head->data);
head = head->next;
}
printf("#/n");
}