I wrote this singly linked list and it worked fine,Now can anyone review my code. I want to do some more clean my delete and add function. And some abstraction.


 ```c99
#include <stdio.h>
#include<stdlib.h>

typedef struct q_9
{
    int data;
    struct q_9 *link;
}*node;

node head=NULL;
node tail=NULL;

node newnode(int x);
void node_add(int x);
void delete_front();
void count();
void display();
void delete_last();

int main() {

    int choice,element;
    

    while (1)
    {
        printf("\n\t 1-->for add data:");
        printf("\n\t 2-->for delete data:");
        printf("\n\t 3-->for count node:");
        printf("\n\t 4-->for delete from last data:");
        printf("\n\t 5-->for display data:");
        printf("\n please enter a choice:");
        scanf("%d",&choice);
        switch (choice)
        {
            
            case 1: printf("enter the element:\t------->");
                    scanf("%d",&element);
                    node_add(element);
                    break;
            case 2:delete_front();
                    break;
            case 3: count();
                    break;    
            case 4: delete_last();
                    break;              
            case 5:display();
                    break;      
            default:
                    break;
        }

        if (choice==6)
        {
            printf("you are exited from loop:\n");
            break;
        }
    }
}

node newnode(int x)
{
    node temp=(node)malloc(sizeof(node));
    temp->data=x;
    temp->link=NULL;
    return temp;
}

void node_add(int x)
{
    node temp=newnode(x);

    if(head==NULL)
    {
        head=temp;
        tail=temp;
        temp=NULL;
        return;
    }
    else
    {
        tail->link=temp;
        tail=temp;
    }
}

void display()
{
    node p=head;
    while (p!=NULL)
    {
        printf("%d\t",p->data);
        p=p->link;
    }
}

void count()
{
    node p=head;
    if (p==NULL)
    {
        printf("no element present here\n");
    }

    int i=0;
    while(p!=NULL)
    {
        i++;
        p=p->link;
    }

    printf("here is %d nodes are present\n",i);
}

void delete_front()
{
   node temp=head;
   head=head->link;
   free(temp);
   printf("\n memory freed");
}

void delete_last()
{
    node temp=tail;
    node p=head;
    
    while(p->link->link!=NULL)p=p->link;

    tail=p->link;

    free(temp);
    printf("memory freed\n");
}
```