Singly link list program in c++ middle position insertion

 #include<iostream>

using namespace std;

struct node {

    int data; // Data

    struct node *next; // Address

}*head;

void createList(int n);

void insertNodeAtMiddle(int data, int position);

void displayList();

int main()

{

    int n, data, position;

    cout<<"Enter the total number of nodes: ";

    cin>>n;

    createList(n);


    cout<<"\nData in the list \n";

    displayList();

    cout<<"nEnter data to insert at middle of the list: ";

    cin>>data;

    cout<<"Enter the position to insert new node: " ;

    cin>>position;

    insertNodeAtMiddle(data, position);


    cout<<"\nData in the list \n";

    displayList();


    return 0;

}

void createList(int n)

{

    struct node *newNode, *temp;

    int data, i;


    head = (struct node *)malloc(sizeof(struct node));


    /*

     * If unable to allocate memory for head node

     */

    if(head == NULL)

    {

        cout<<"Unable to allocate memory.";

    }

    else

    {

        cout<<"Enter the data of node 1: ";

        cin>>data;

        head->data = data; // Link the data field with data

        head->next = NULL; // Link the address field to NULL


        temp = head;

        for(i=2; i<=n; i++)

        {

            newNode = (struct node *)malloc(sizeof(struct node));


            /* If memory is not allocated for newNode */

            if(newNode == NULL)

            {

                cout<<"Unable to allocate memory.";

                break;

            }

            else

            {

                cout<<"Enter the data of node:"<<i<<"";

                cin>>data;


                newNode->data = data; // Link the data field of newNode with data

                newNode->next = NULL; // Link the address field of newNode with NULL


                temp->next = newNode; // Link previous node i.e. temp to the newNode

                temp = temp->next;

            }

        }


        cout<<"SINGLY LINKED LIST CREATED SUCCESSFULLY\n";

    }

}

void insertNodeAtMiddle(int data, int position)

{

    int i;

    struct node *newNode, *temp;


    newNode = (struct node*)malloc(sizeof(struct node));


    if(newNode == NULL)

    {

        cout<<"Unable to allocate memory.";

    }

    {

        newNode->data = data; // Link data part

        newNode->next = NULL;

        temp = head;

        for(i=2; i<=position-1; i++)

        {

            temp = temp->next;


            if(temp == NULL)

                break;

        }


        if(temp != NULL)

        {

            /* Link address part of new node */

            newNode->next = temp->next;

            temp->next = newNode;


            cout<<"DATA INSERTED SUCCESSFULLY\n";

        }

        else

        {

            cout<<"UNABLE TO INSERT DATA AT THE GIVEN POSITION\n";

        }

    }

}

void displayList()

{

    struct node *temp;


    /*

     * If the list is empty i.e. head = NULL

     */

    if(head == NULL)

    {

        cout<<"List is empty.";

    }

    else

    {

        temp = head;

        while(temp != NULL)

        {

            cout<<temp->data; // Print data of current node

            temp = temp->next; // Move to next node

        }

    }

}

Comments

Popular Posts