3. Given the following Rust code for inserting at the beginning of a circular linked list, what will be the printed list after insertion?
struct Node {
data: i32,
next: Option,
}
fn print_list(head: &Option) {
if head.is_none() { return; }
let mut temp = head.as_ref();
loop {
if let Some(node) = temp {
print!("{} -> ", node.data);
temp = node.next.as_ref();
if temp == head.as_ref() { break; }
}
}
println!("null");
}
fn insert_beginning(head: &mut Option, val: i32) {
let mut new_node = Box::new(Node { data: val, next: None });
if head.is_none() {
new_node.next = Some(new_node.clone());
*head = Some(new_node);
return;
}
let mut temp = head.as_mut().unwrap();
while temp.next.as_ref().unwrap().as_ref() != head.as_ref().unwrap().as_ref() {
temp = temp.next.as_mut().unwrap();
}
new_node.next = head.take();
temp.next = Some(new_node);
*head = temp.next.clone();
}
fn main() {
let mut head = None;
insert_beginning(&mut head, 10);
insert_beginning(&mut head, 20);
insert_beginning(&mut head, 30);
print_list(&head);
}