#include #include typedef struct cnode *cnptr; typedef struct cnode { int data; cnptr next; cnptr prev; }cnode; cnptr last=NULL; cnptr createCnode(int val) { cnptr temp=(cnptr)malloc(sizeof(cnode)); temp->data=val; temp->next=NULL; temp->prev=NULL; return temp; } void insertBegin(int val) { cnptr temp=createCnode(val); if(last==NULL) { last=temp; last->next=last; last->prev=last; } else { temp->next=last->next;//head last->next->prev=temp; temp->prev=last; last->next=temp; } } void deleteend() { cnptr current; if(last==NULL) { printf("List is empty"); } else { cnptr previous=last->prev; previous->next=last->next; last->next->prev=previous; free(last); last=previous; } } void revtraverse() { cnptr current=last; printf("%d ",current->data); current=current->prev; while(current!=last) { printf("%d ",current->data); current=current->prev; } printf("\n"); } void traverse() { cnptr current=last; current=current->next; while(current!=last) { printf("%d ",current->data); current=current->next; } printf("%d\n",current->data); } int main() { char contin='y'; int choice; while(contin=='y') { printf("What do you want to do? \n 1. For inserting at beginning \n 2. For deleting at the end. \n 3. For traversing the doubly LL\n"); scanf("%d",&choice); switch(choice) { case 1: { int val; printf("Enter the value\n"); scanf("%d",&val); insertBegin(val); break; } case 2: { deleteend(); printf("Element deleted\n"); break; } case 3: { printf("elements of the list are\n"); traverse(); break; } } printf("continue?(y/n)\n"); fflush(stdin); scanf("%c",&contin); } }