Doubly LinkedList Insertion at Beginning

Algorithm

INPUT: HEADER IS POINTER TO THE HEADER NODE OF THE LINKEDLIST
OUTPUT: LINKEDLIST WITH THE INSERTED ELEMENT
DATA STRUCTURE: DOUBLY LINKEDLIST

STEP 1: START
STEP 2: NEW=NEWNODE(NEW)
STEP 3: NEW->DATA=ITEM
STEP 4: NEW->RLINK=HEADER->RLINK
STEP 5: NEW->LLINK=HEADER
STEP 6: HEADER->RLINK=NEW
STEP 7: END

Code

#include <stdio.h>
#include <stdlib.h>
int getnode(int);
void display();
void displayrev();
void insertatbeg();
int x, pos, n, item;
struct node
{
    int data;
    struct node *llink;
    struct node *rlink;
};
struct node *prev, *head, *tail, *news, *p, *ptr, *ptr1, *ptr2;
struct node *q1;
struct node *header, *header1;
struct node *q, *r, *s;
int main()
{
    int a;
    char ch;
    printf("ENTER THE LIMIT ");
    scanf("%d", &n);
    getnode(n);
    printf("ENTER THE DATA YOU WANT TO INSERT:");
    scanf("%d",&item);
    insertatbeg();
    display(header);
    return 0;
}

void insertatbeg()
{
    ptr = header->rlink;
    news = malloc(sizeof(struct node));
    news->data = item;
    news->rlink = ptr;
    news->llink = header;
    header->rlink = news;
}

void display(struct node *head1)
{
    struct node *ptr;
    ptr = head1->rlink;
    while (ptr != NULL)
    {
        printf("%d ", ptr->data);
        ptr = ptr->rlink;
    }
}
void displayrev()
{
    struct node *ptr;
    ptr = tail;
    printf("reverse traversal ");
    while (ptr != NULL)
    {
        printf("%d ", ptr->data);
        ptr = ptr->llink;
    }
}
int getnode(int n)
{
    header = malloc(sizeof(struct node));
    head = NULL;
    ptr = malloc(sizeof(struct node));
    for (int i = 0; i < n; i++)
    {
        ptr->llink = NULL;
        p = malloc(sizeof(struct node));
        scanf("%d", &p->data);
        ptr->rlink = p;
        p->llink = ptr;
        p->rlink = NULL;
        if (head == NULL)
        {
            head = p;
            p->llink = NULL;
            ptr->llink = head;
        }
        else
        {
            prev->rlink = p;
            p->llink = prev;
        }
        prev = p;
    }
    tail = prev;
    header->rlink = head;
    header->llink = NULL;
    display(header);
    displayrev();
    return 0;
}

Output

user@computer$ : ENTER THE LIMIT 5
1
2
3
4
5
1 2 3 4 5 reverse traversal 5 4 3 2 1 ENTER THE DATA YOU WANT TO INSERT:6
6 1 2 3 4 5

Leave a Comment

Your email address will not be published. Required fields are marked *