hello guys! my goal is to test if the string inputted by the user is palindrome or not using stack and queue..but now i am having a trouble in my queue program...can you please check my code and tell me what is the problem...thank you.. here's my code: Code: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 typedef struct stack { char value; struct stacknode *next; }STACK_NODE; typedef struct ListNode { char element; struct ListNode *next; }ListNode; typedef struct Q { ListNode *frontOfQueue; ListNode *rearOfQueue; int numElements; } Queue; void initStack(STACK_NODE** head); void push(STACK_NODE** head, char input); void stackfunction(char* input); int isEmptyStack(STACK_NODE** head); void initQueue(Queue *q); void enqueue(Queue *q, char input); int IsEmptyQ(Queue* q); void queuefunction(char *input); main() { char* string = (char*)malloc(MAX+1* sizeof(char)); char* stringq = (char*)malloc(MAX+1* sizeof(char)); char option; do { printf("\n\tInput string: "); fflush(stdin); gets(string); stackfunction(string); queuefunction(stringq); printf("\n\tstack: %s",string); printf("\n\tqueue: %s",stringq); printf("\n\n\tDo you want to continue? [Y/N]: "); option=getchar(); }while(toupper(option)=='y'); printf("\n\n\tProgram Terminated...\n"); return 0; } void initStack(STACK_NODE** head){ *head = NULL; } void push(STACK_NODE** head, char input){ STACK_NODE* temp = (STACK_NODE*)malloc(sizeof(STACK_NODE)); temp->value =input; temp->next = *head; *head = temp; } int isEmpty(STACK_NODE** head){ if(*head==NULL){ printf("Stack is empty!"); return 1; } } void stackfunction(char* input){ STACK_NODE* head = (STACK_NODE*)malloc(sizeof(STACK_NODE)); initStack(&head); while(*input != '\0') { push(&head,*input); input++; } } void queuefunction(char *input){ Queue* head = (Queue*)malloc(sizeof(Queue)); initQueue(&head); while(*input != '\0') { enqueue(&head,*input); input++; } } void initQueue(Queue *q){ q->frontOfQueue = NULL; q->rearOfQueue = NULL; q->numElements=0; } void enqueue(Queue *q, char input) { ListNode *temp= (ListNode*)malloc(sizeof(ListNode)); //out of memory if (temp == NULL){ printf("error"); return; } //add element to listnode temp->element =input; temp->next=NULL; if(IsEmptyQ(&(*q))){ q->frontOfQueue = temp; q->rearOfQueue = temp; } else { q->rearOfQueue->next = temp; q->rearOfQueue = temp; } q->numElements++; } int IsEmptyQ(Queue* q) { return(q->frontOfQueue==NULL); }