Mental Model
Add a new item to the end of a line so it waits its turn.
Analogy: Like people lining up at a ticket counter, new people join at the back of the line.
front -> 1 -> 2 -> 3 -> null rear ↑
front -> 1 -> 2 -> 3 -> null rear ↑
new_node = 4 -> null
1 -> 2 -> 3 -> [rear->4] -> null
front -> 1 -> 2 -> 3 -> 4 -> null rear ↑
front -> 1 -> 2 -> 3 -> 4 -> null rear ↑
class Node: def __init__(self, value): self.value = value self.next = None class Queue: def __init__(self): self.front = None self.rear = None def enqueue(self, value): new_node = Node(value) # create new node if self.rear is None: # empty queue self.front = new_node self.rear = new_node else: self.rear.next = new_node # link new node at end self.rear = new_node # update rear pointer def __str__(self): result = [] current = self.front while current: result.append(str(current.value)) current = current.next return ' -> '.join(result) + ' -> null' # Driver code queue = Queue() queue.enqueue(1) queue.enqueue(2) queue.enqueue(3) print(queue) # before enqueue queue.enqueue(4) print(queue) # after enqueue
new_node = Node(value) # create new nodeif self.rear is None: # empty queueself.rear.next = new_node # link new node at endself.rear = new_node # update rear pointerif self.rear is None: # empty queue