# C > Data Structures Code Examples

## Reversal of a singly linklist by recursion

``` Reversal of a singly linklist by recursion #include<stdio.h> #include<conio.h> #include<alloc.h> struct node { int data; struct node*next; }; void insert(struct node**p,int num) /*Function for inserting an element into a list */ { if(*p==NULL) { (*p)=(struct node*)malloc(sizeof(struct node)); (*p)->next=NULL; (*p)->data=num; } else { insert(&((*p)->next),num); } } void display(struct node*p) /*Function for displaying the list*/ { while(p!=NULL) { printf("%d ",p->data); p=p->next; } } void reverse(struct node**p) /*Function for reversing the list by recursion */ { struct node*q,*r,*x; int d; q=(*p); /*stores the address of the first element */ x=q; /*also stores the element of the first element for counter pourpose */ d=q->data; /*stores the data of the first element*/ r=q->next; /*stores the address of the second element in the list */ free(q); /*deletes the first element of the list*/ if(x==NULL) return ; else { reverse(&(r));/*Recursive call*/ insert(p,d); /*This function is put in the stack so the first will be taken as last element for the new list */ } } void main() { clrscr(); struct node*p=NULL; int n,d,i=0; printf("How many...? "); scanf("%d",&n); while(i++!=n) { scanf("%d",&d); insert(&p,d); } display(p); reverse(&p); printf(" The reversed list is..."); display(p); getch(); } ```