MulticoreWare Interview Question

reverse a double linked list- in round 2

Interview Answer

Anonymous

Jun 25, 2019

#include #include struct node { int data; struct node *next,*prev; }; int c=1; struct node *head=NULL; struct node* getnode() { struct node *newnode; newnode=(struct node *)malloc(sizeof(struct node)); newnode->data=c;c++; newnode->next=NULL; newnode->prev=NULL; return newnode; } void reverse() { struct node *p,*temp; p=head; //printf("%d",p->data); p->prev=p->next; p->next=NULL; p=p->prev; for(;p->next!=NULL;p=p->prev) { temp=p->prev; p->prev=p->next; p->next=temp; } //printf("%d",p->data); p->next=p->prev; p->prev=head; head=p; } void insert() { struct node *newnode; if(head==NULL) { newnode=getnode(); head=newnode; newnode->prev=head; } else { struct node *p; for(p=head;p->next!=NULL;p=p->next); newnode=getnode(); newnode->prev=p; p->next=newnode; } //printf("\nsuccess in inserting"); } void display() { if(head==NULL) { printf("\nnothing to display"); } else { struct node *p; for(p=head;p!=NULL;p=p->next) printf("%d\t",p->data); printf("\n"); } } void deletde() { if(head==NULL) { printf("\nnothing to delete"); } else { struct node *p,*q; for(p=head;p->next!=NULL;q=p,p=p->next); printf("\n%d\t is deleted",p->data); q->next=NULL; } printf("\n"); } void update() { int n; if(head==NULL) { printf("\nnothing to update"); } else { scanf("%d",&n); struct node *p,*q; for(p=head;p!=NULL;p=p->next) { if(p->data==n) { p->data=5;break; } } } } int main() { deletde(); insert(); insert(); insert(); insert(); insert(); insert(); reverse(); display(); deletde(); display(); update(); display(); free(head); }

1