You are on page 1of 10

Q.

2 Write a program to demonstrate doubly link list and perform following


operations

a. Create List

b. AddAtBeg

c. Delete Node.

d. Display data/Node.

*******************CODE*******************

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

struct node
{
    int data;
    struct node *prev;
    struct node *next;
};
struct node *head, *last;

void createList(int n)
{
    int i, data;
    struct node *newNode;

    if (n >= 1)
    {
        head = (struct node *)malloc(sizeof(struct node));

        if (head != NULL)
        {
            printf("Enter data of 1 node: ");
            scanf("%d", &data);

            head->data = data;
            head->prev = NULL;
            head->next = NULL;

            last = head;
            for (i = 2; i <= n; i++)
            {
                newNode = (struct node *)malloc(sizeof(struct node));

                if (newNode != NULL)
                {
                    printf("Enter data of %d node: ", i);
                    scanf("%d", &data);

                    newNode->data = data;
                    newNode->prev = last;
                    newNode->next = NULL;

                    last->next = newNode;
                    last = newNode;      
                }
                else
                {
                    printf("Unable to allocate memory.");
                    break;
                }
            }

            printf("\nDOUBLY LINKED LIST CREATED SUCCESSFULLY\n");


        }
        else
        {
            printf("Unable to allocate memory");
        }
    }
}

void displayListFromFirst()
{
    struct node *temp;
    int n = 1;

    if (head == NULL)
    {
        printf("List is empty.");
    }
    else
    {
        temp = head;
        printf("\n\nDATA IN THE LIST:\n");

        while (temp != NULL)


        {
            printf("DATA of %d node = %d\n", n, temp->data);

            n++;

           
            temp = temp->next;
        }
    }
}

void insertAtFront()
{
    int data;
    struct node *temp;
    temp = (struct node *)malloc(sizeof(struct node));
    printf("\nEnter number to be inserted: ");
    scanf("%d", &data);
    temp->data = data;
    temp->prev = NULL;

    temp->next = head;
    head = temp;
}

void deletePosition()
{
    int pos, i = 1;
    struct node *temp, *position;
    temp = head;

   
    if (head == NULL)
        printf("\nList is empty\n");

   
    else {
       
        printf("\nEnter position : ");
        scanf("%d", &pos);

   
        if (pos == 1) {
            void deleteFirst();
            if (head != NULL) {
                head->prev = NULL;
            }
            free(position);
            return;
        }

       
        while (i < pos - 1) {
            temp = temp->next;
            i++;
        }
       
        position = temp->next;
        if (position->next != NULL)
            position->next->prev = temp;
        temp->next = position->next;

       
        free(position);
    }
}

void deleteFirst()
{
    struct node* temp;
    if (head == NULL)
        printf("\nList is empty\n");
    else {
        temp = head;
        head = head->next;
        if (head != NULL)
            head->prev = NULL;
        free(temp);
    }
}

int main()
{
    int n, choice;

    head = NULL;
    last = NULL;

    printf("Enter the number of nodes you want to create: ");


    scanf("%d", &n);

    createList(n);
    while (1)
    {
        printf("\nPress 1 to display list from First\n");
        printf("\nPress 2 to Insert Elemnt at Beginning\n");
        printf("\nPress 3 to Delete Elemnt at Entered Position\n");
        printf("\nPress 4 to Delete of first element\n");
        scanf("%d", &choice);

        switch (choice)
        {
            case 1:
                displayListFromFirst();
                break;
            case 2:
                insertAtFront();
                break;
            case 3:
                deletePosition();
                break;
            case 4:
                deleteFirst();
            break;
            case 5:
                exit(1);
                break;
            default:
                printf("Incorrect Choice. Try Again \n");
                continue;
        }
    }
    return 0;
}
*********************OUTPUT*********************

You might also like