DS – Linked List using Recursion

Linked List operations using Recursion

Insert first element into list:

Insert Second element into List:

Print Elements in Forward Direction:

#include<stdio.h>
#include<stdlib.h>
struct Node
{
            int data;
            struct Node *link;
};
struct Node *root=NULL;
struct Node* insert(struct Node*, int);
struct Node* newNode(int);
void print_forward(struct Node*);
void print(struct Node*);
void print_backward(struct Node*);
void print_reverse(struct Node*);
int main()
{
            int ch, ele;
            while(1)
{
                        printf(“1.Insert \n”);
                        printf(“2.Print \n”);
                        printf(“3.Print_reverse \n”);
                        printf(“4.Quit \n”);
                        printf(“Enter choice : “);
                        scanf(“%d”, &ch);
                        switch(ch)
                        {
                                    case 1  :           printf(“Enter element : “);
                                                            scanf(“%d”, &ele);
                                                            root = insert(root, ele);
                                                            break;
                                   
                                    case 2  :           print_forward(root);
                                                            break;
                                                                       
                                    case 3  :           print_backward(root);
                                                            break;
                                   
                                    case 4 :           exit(1);
                                    default :           printf(“Invalid choice \n\n”);
                        }
            }
            return 0;          
}
struct Node* insert(struct Node *node, int ele)
{
            if(node == NULL)
{
                        return newNode(ele);
            }
            else{
                        node->link = insert(node->link, ele);
            }
            return node;
}
struct Node* newNode(int data)
{
            struct Node* node;
            node = (struct Node*)malloc(sizeof(struct Node));
            node->data = data;
            node->link = NULL;
            return node;
}
void print_forward(struct Node* node)
{
            if(node==NULL)
                        printf(“Empty list”);
            else
                        print(node);     
}
void print(struct Node* node)
{
            if(node == NULL){
                        return;
            }
            printf(“%d \n”, node->data);
            print(node->link);
}
void print_backward(struct Node* node)
{
            if(node==NULL)
                        printf(“Empty list”);
            else
                        print_reverse(node);    
}
void print_reverse(struct Node* node)
{
            if(node == NULL)
{
                        return;
            }
            print_reverse(node->link);
            printf(“%d \n”, node->data);
}
Scroll to Top