#include <iostream>
using namespace std;

struct node
{
    int data;
    node *next;
};
node *head = NULL;
void insertNode(int value);
void display();
void deleteNode(int value);
void insertBegin(int value);
void deleteBegin();
void delete_end();
int main()
{
    insertNode(1);
    insertNode(9);
    insertNode(2);
    display();
    insertBegin(4);
    display();
    deleteBegin();
    display();
    return 0;
}
void insertNode(int value)
{
    node *new_node, *last;
    new_node = new node;
    new_node->data = value;

    if (head == NULL)
    {
        head = new_node;
        new_node->next = NULL;
    }
    else
    {
        last = head;
        while (last->next != NULL)
        {
            last = last->next;
        }
        last->next = new_node;
        new_node->next = NULL;
    }
}
void display()
{
    node *current;

    if (head == NULL)
    {
        cout << "linked list is empty" << endl;
    }

    else
    {
        current = head;

        while (current != NULL)
        {
            cout << current->data << "  ";

            current = current->next;
        }
    }
    cout << endl;
}
void deleteNode(int value)
{
    node *current, *prev;
    current = head;
    prev = head;
    if (current->data == value)
    {
        head = current->next;
        free(current);
        return;
    }
    while (current->data != value)
    {
        prev = current;
        current = current->next;
    }
    prev->next = current->next;
    free(current);
}
void insertBegin(int value){
   node* new_node = new node;
   new_node->data = value;
   new_node->next = head ;
   head = new_node;
}
void deleteBegin(){
    if (head != NULL){
    node* current, *prev;
    current = head;
    prev = head ;
    current = current->next;
    head = current;
    free (prev);
    }
    else cout << "linkedlist is empty";
}
void delete_end(){
    if(head==NULL){
        cout<<"linked list is empty.\n";
    }
    else if(head->next==NULL){
        delete(head);
        head=NULL;
    }
    else{
        node* ptr=head;

        while(ptr->next->next!=NULL){
            ptr=ptr->next;
        }

        delete(ptr->next);
        ptr->next=NULL;
    }
}