Bird
Raised Fist0
DSA Typescriptprogramming

Enqueue Using Linked List in DSA Typescript

Choose your learning style10 modes available
Mental Model
Enqueue means adding a new item at the end of a line. Using a linked list, we keep track of the last item to add new items quickly.
Analogy: Imagine a line of people holding hands. To add a new person, you only need to hold the last person's hand and link the new person there.
head -> 1 -> 2 -> 3 -> null
                 ↑tail
Dry Run Walkthrough
Input: queue: 1 -> 2 -> 3 -> null, enqueue value 4
Goal: Add value 4 at the end of the queue using linked list enqueue operation
Step 1: Create new node with value 4
head -> 1 -> 2 -> 3 -> null
                 ↑tail
newNode: 4 -> null
Why: We need a new node to add to the queue
Step 2: Link current tail's next to new node
head -> 1 -> 2 -> 3 -> 4 -> null
                 ↑tail
newNode: 4 -> null
Why: Attach new node at the end of the queue
Step 3: Update tail pointer to new node
head -> 1 -> 2 -> 3 -> 4 -> null
                      ↑tail
Why: Tail must point to the last node for future enqueues
Result:
head -> 1 -> 2 -> 3 -> 4 -> null
                      ↑tail
Annotated Code
DSA Typescript
class Node {
  value: number;
  next: Node | null;
  constructor(value: number) {
    this.value = value;
    this.next = null;
  }
}

class Queue {
  head: Node | null;
  tail: Node | null;

  constructor() {
    this.head = null;
    this.tail = null;
  }

  enqueue(value: number): void {
    const newNode = new Node(value); // create new node
    if (!this.tail) { // if queue empty
      this.head = newNode; // head and tail are new node
      this.tail = newNode;
      return;
    }
    this.tail.next = newNode; // link new node at tail
    this.tail = newNode; // update tail pointer
  }

  printQueue(): void {
    let curr = this.head;
    let result = '';
    while (curr) {
      result += curr.value + ' -> ';
      curr = curr.next;
    }
    result += 'null';
    console.log(result);
  }
}

// Driver code
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.printQueue(); // before enqueue 4
queue.enqueue(4);
queue.printQueue(); // after enqueue 4
const newNode = new Node(value); // create new node
create new node to add
if (!this.tail) { // if queue empty
check if queue is empty to set head and tail
this.tail.next = newNode; // link new node at tail
attach new node after current tail
this.tail = newNode; // update tail pointer
move tail pointer to new last node
OutputSuccess
1 -> 2 -> 3 -> null 1 -> 2 -> 3 -> 4 -> null
Complexity Analysis
Time: O(1) because we add the new node directly at the tail without traversing
Space: O(1) because we only create one new node for each enqueue
vs Alternative: Compared to array enqueue which may require shifting or resizing, linked list enqueue is faster and uses constant time
Edge Cases
Empty queue
Head and tail both point to the new node
DSA Typescript
if (!this.tail) { // if queue empty
Single element queue
New node is linked after tail and tail updates to new node
DSA Typescript
this.tail.next = newNode; // link new node at tail
When to Use This Pattern
When you need to add items to the end of a queue efficiently, use the enqueue linked list pattern with a tail pointer to avoid traversing the whole list.
Common Mistakes
Mistake: Not updating the tail pointer after adding the new node
Fix: Always set tail = newNode after linking to keep tail correct
Mistake: Not handling empty queue case where head and tail are null
Fix: Check if tail is null and set both head and tail to new node
Summary
Adds a new element at the end of the queue using a linked list.
Use when you want fast enqueue operations without shifting elements.
Keep a tail pointer to add new nodes in constant time.

Practice

(1/5)
1. What does the enqueue operation do in a linked list implementation of a queue?
easy
A. Removes the first element from the linked list
B. Adds a new element at the end (tail) of the linked list
C. Adds a new element at the beginning (head) of the linked list
D. Deletes the last element from the linked list

Solution

  1. Step 1: Understand enqueue operation

    Enqueue means adding an element to the queue.
  2. Step 2: Identify linked list position for enqueue

    In a linked list queue, new elements are added at the tail (end).
  3. Final Answer:

    Adds a new element at the end (tail) of the linked list -> Option B
  4. Quick Check:

    Enqueue = Add at tail [OK]
Hint: Enqueue always adds at the tail in linked list queue [OK]
Common Mistakes:
  • Confusing enqueue with dequeue operation
  • Adding new element at head instead of tail
  • Thinking enqueue removes elements
  • Mixing linked list positions
2. Which of the following is the correct TypeScript syntax to create a new node for enqueue in a linked list?
easy
A. newNode = new Node();
B. let newNode = Node(value);
C. const newNode = new Node(value);
D. const newNode = Node.new(value);

Solution

  1. Step 1: Recall TypeScript class instantiation

    To create an object, use new ClassName(params).
  2. Step 2: Check options for correct syntax

    Only const newNode = new Node(value); correctly creates a new Node instance.
  3. Final Answer:

    const newNode = new Node(value); -> Option C
  4. Quick Check:

    Use 'new' keyword to instantiate class [OK]
Hint: Use 'new' keyword to create class instances in TypeScript [OK]
Common Mistakes:
  • Omitting 'new' keyword when creating objects
  • Using function call syntax without 'new'
  • Incorrect property access like Node.new
  • Not declaring variable with let or const
3. What will be the state of the queue after executing the following enqueue operations on an empty linked list queue?
enqueue(10); enqueue(20); enqueue(30);
medium
A. 10 -> 20 -> 30 -> null
B. 30 -> 20 -> 10 -> null
C. null -> 10 -> 20 -> 30
D. 20 -> 10 -> 30 -> null

Solution

  1. Step 1: Understand enqueue order

    Enqueue adds elements at the tail, so order is preserved as inserted.
  2. Step 2: Trace each enqueue

    After enqueue(10): 10 -> null
    After enqueue(20): 10 -> 20 -> null
    After enqueue(30): 10 -> 20 -> 30 -> null
  3. Final Answer:

    10 -> 20 -> 30 -> null -> Option A
  4. Quick Check:

    Enqueue order = insertion order [OK]
Hint: Enqueue adds at tail, so order stays same as insertion [OK]
Common Mistakes:
  • Reversing order of elements after enqueue
  • Confusing enqueue with push at head
  • Misreading linked list direction
  • Ignoring null at the end
4. Consider this enqueue function snippet for a linked list queue:
enqueue(value: number) {
  const newNode = new Node(value);
  if (!this.tail) {
    this.head = newNode;
    this.tail = newNode;
    return;
  }
  this.tail.next = newNode;
  this.tail = newNode;
}

What is the bug in this code?
medium
A. It does not update the previous tail's next pointer to newNode
B. It incorrectly sets head to null when queue is empty
C. It creates newNode without value
D. It sets tail to null after enqueue

Solution

  1. Step 1: Analyze enqueue logic

    When queue is empty, head and tail should point to newNode.
  2. Step 2: Check linking of nodes

    Code sets tail = newNode but does not link old tail's next to newNode, breaking chain.
  3. Final Answer:

    It does not update the previous tail's next pointer to newNode -> Option A
  4. Quick Check:

    Link old tail's next to newNode [OK]
Hint: Always link old tail's next to new node when enqueueing [OK]
Common Mistakes:
  • Forgetting to update old tail's next pointer
  • Not handling empty queue case properly
  • Setting tail to null accidentally
  • Creating node without value parameter
5. You have a linked list queue with elements: 5 -> 15 -> 25 -> null.
After enqueue(35), what will be the correct linked list representation and tail node value?
hard
A. 5 -> 15 -> 25 -> 35 -> null, tail value = 25
B. 35 -> 5 -> 15 -> 25 -> null, tail value = 25
C. 5 -> 15 -> 25 -> null, tail value = 25
D. 5 -> 15 -> 25 -> 35 -> null, tail value = 35

Solution

  1. Step 1: Understand enqueue effect on queue

    Enqueue adds new element at tail, so 35 goes after 25.
  2. Step 2: Update tail pointer

    Tail must point to the new last node, which holds 35.
  3. Final Answer:

    5 -> 15 -> 25 -> 35 -> null, tail value = 35 -> Option D
  4. Quick Check:

    Enqueue adds at tail, tail updates to new node [OK]
Hint: Tail always points to last enqueued node [OK]
Common Mistakes:
  • Adding new node at head instead of tail
  • Not updating tail pointer after enqueue
  • Confusing tail value with head value
  • Leaving tail pointing to old last node
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard