Skip to main content

Insertion in Double Linked list

 




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


struct node{
    int data;
    struct node *prev;
    struct node *link;
};

void display(struct node *ptr){
    while(ptr!=NULL){
        printf(" %d ",ptr->data);
        ptr = ptr->link;
    }
}
struct node *insert_beg(struct node *head, int s){
    struct node *e = malloc(sizeof(struct node));

    head->prev = e;
    e->link = head;
    e->data = s;
   

return  e;
}

struct node *insert_end(struct node *head,int s){
    struct node *e = malloc(sizeof(struct node));
    struct node *ptr = head;
   e->data =s;
   e->link = NULL;    
   e->prev = NULL;
   while(ptr->link!=NULL)
   {
       ptr= ptr->link;
   }
   ptr->link = e;
   e->prev = ptr;
   return head;  
}

struct node *insert_pos(struct node *head,int s,int pos){
    struct node *e = malloc(sizeof(struct node));
    struct node *ptr = head;
    int j = 0;
    while (j!=pos-1)
    {
        ptr= ptr->link;
        j++;
    }
    e->data = s;
    e->link = ptr->link;
    e->prev = ptr;
    ptr->link = e;
return head;
   
}

int main()
{
    struct node *a;
    struct node *b;
    struct node *c;
    struct node *d;
 
   
    a = malloc(sizeof(struct node));
    b = malloc(sizeof(struct node));
    c = malloc(sizeof(struct node));
    d = malloc(sizeof(struct node));
   


    a->prev = NULL;
    a->data = 1;
    a->link = b;

    b->prev = a;
    b->data = 2;
    b->link = c;

    c->prev = b;
    c->data = 3;
    c->link = d;

    d->prev = c;
    d->data = 4;
    d->link = NULL;

display(a);
printf("\n");
// a = insert_beg(a,0);
// a = insert_end(a,5);
a = insert_pos(a,0,1);

display(a);

   
    return 0;
}


Comments