Bird
0
0
DSA Cprogramming~20 mins

Enqueue Using Linked List in DSA C - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Linked List Queue Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of enqueue operations on linked list queue
What is the printed state of the queue after enqueuing 10, 20, and 30 in order?
DSA C
typedef struct Node {
    int data;
    struct Node* next;
} Node;

typedef struct Queue {
    Node* front;
    Node* rear;
} Queue;

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

void enqueue(Queue* q, int value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;
    if (q->rear == NULL) {
        q->front = q->rear = newNode;
        return;
    }
    q->rear->next = newNode;
    q->rear = newNode;
}

void printQueue(Queue* q) {
    Node* temp = q->front;
    while (temp != NULL) {
        printf("%d -> ", temp->data);
        temp = temp->next;
    }
    printf("null\n");
}

int main() {
    Queue q = {NULL, NULL};
    enqueue(&q, 10);
    enqueue(&q, 20);
    enqueue(&q, 30);
    printQueue(&q);
    return 0;
}
A20 -> 30 -> null
B30 -> 20 -> 10 -> null
C10 -> 20 -> null
D10 -> 20 -> 30 -> null
Attempts:
2 left
💡 Hint
Remember that enqueue adds elements at the rear of the queue.
Predict Output
intermediate
2:00remaining
Output after enqueue and one dequeue operation
What is the printed state of the queue after enqueuing 5, 15, 25 and then dequeuing one element?
DSA C
typedef struct Node {
    int data;
    struct Node* next;
} Node;

typedef struct Queue {
    Node* front;
    Node* rear;
} Queue;

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

void enqueue(Queue* q, int value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;
    if (q->rear == NULL) {
        q->front = q->rear = newNode;
        return;
    }
    q->rear->next = newNode;
    q->rear = newNode;
}

int dequeue(Queue* q) {
    if (q->front == NULL) return -1;
    Node* temp = q->front;
    int val = temp->data;
    q->front = q->front->next;
    if (q->front == NULL) q->rear = NULL;
    free(temp);
    return val;
}

void printQueue(Queue* q) {
    Node* temp = q->front;
    while (temp != NULL) {
        printf("%d -> ", temp->data);
        temp = temp->next;
    }
    printf("null\n");
}

int main() {
    Queue q = {NULL, NULL};
    enqueue(&q, 5);
    enqueue(&q, 15);
    enqueue(&q, 25);
    dequeue(&q);
    printQueue(&q);
    return 0;
}
A5 -> 15 -> 25 -> null
B15 -> 25 -> null
C25 -> null
Dnull
Attempts:
2 left
💡 Hint
Dequeue removes from the front of the queue.
🔧 Debug
advanced
2:00remaining
Identify the bug in enqueue function
Which option shows the correct fix to avoid memory leak in this enqueue function?
DSA C
void enqueue(Queue* q, int value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;
    if (q->rear == NULL) {
        q->front = newNode;
        // Missing assignment to q->rear here
        return;
    }
    q->rear->next = newNode;
    q->rear = newNode;
}
AAdd 'q->rear = newNode;' inside the if block before return
BFree newNode before return in the if block
CChange 'q->front = newNode;' to 'q->front = q->rear;'
DRemove the if block entirely
Attempts:
2 left
💡 Hint
Both front and rear must point to the new node when queue is empty.
🧠 Conceptual
advanced
1:30remaining
Why use linked list for queue enqueue?
Why is a linked list preferred over an array for implementing enqueue in a queue?
ALinked list allows dynamic size and O(1) enqueue without shifting elements
BLinked list uses less memory than arrays always
CLinked list stores elements in sorted order automatically
DLinked list requires less code to implement than arrays
Attempts:
2 left
💡 Hint
Think about resizing and shifting in arrays.
Predict Output
expert
3:00remaining
Output after multiple enqueue and dequeue operations
What is the printed state of the queue after these operations? enqueue 1 enqueue 2 enqueue 3 dequeue enqueue 4 dequeue enqueue 5 printQueue
DSA C
typedef struct Node {
    int data;
    struct Node* next;
} Node;

typedef struct Queue {
    Node* front;
    Node* rear;
} Queue;

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

void enqueue(Queue* q, int value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;
    if (q->rear == NULL) {
        q->front = q->rear = newNode;
        return;
    }
    q->rear->next = newNode;
    q->rear = newNode;
}

int dequeue(Queue* q) {
    if (q->front == NULL) return -1;
    Node* temp = q->front;
    int val = temp->data;
    q->front = q->front->next;
    if (q->front == NULL) q->rear = NULL;
    free(temp);
    return val;
}

void printQueue(Queue* q) {
    Node* temp = q->front;
    while (temp != NULL) {
        printf("%d -> ", temp->data);
        temp = temp->next;
    }
    printf("null\n");
}

int main() {
    Queue q = {NULL, NULL};
    enqueue(&q, 1);
    enqueue(&q, 2);
    enqueue(&q, 3);
    dequeue(&q);
    enqueue(&q, 4);
    dequeue(&q);
    enqueue(&q, 5);
    printQueue(&q);
    return 0;
}
A4 -> 5 -> null
B2 -> 3 -> 4 -> 5 -> null
C3 -> 4 -> 5 -> null
D1 -> 2 -> 3 -> 4 -> 5 -> null
Attempts:
2 left
💡 Hint
Track the queue after each operation carefully.