3. Given this Rust code snippet for enqueue operation on a linked list queue, what will be the printed queue after enqueuing values 10, 20, 30?
struct Node {
data: i32,
next: Option,
}
struct Queue {
head: Option,
tail: *mut Node,
}
impl Queue {
fn new() -> Self {
Queue { head: None, tail: std::ptr::null_mut() }
}
fn enqueue(&mut self, val: i32) {
let mut new_node = Box::new(Node { data: val, next: None });
let raw_node: *mut _ = &mut *new_node;
if self.tail.is_null() {
self.head = Some(new_node);
self.tail = raw_node;
} else {
unsafe { (*self.tail).next = Some(new_node); }
self.tail = raw_node;
}
}
fn print_queue(&self) {
let mut current = &self.head;
while let Some(node) = current {
print!("{} -> ", node.data);
current = &node.next;
}
println!("null");
}
}
fn main() {
let mut q = Queue::new();
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
q.print_queue();
}