#[derive(Debug)] struct Node { value: i32, next: Option>, } fn build_chain() -> Option> { let mut p = None; for i in 0..3 { p = Some(Box::new(Node { value: i, next: p, })); } p } fn print_chain(mut p: &Option>) { let mut values = vec![]; while let Some(node) = p { values.push(node.value.to_string()); p = &node.next; } println!("{}", values.join(" -> ")) } fn main() { let p = build_chain(); print_chain(&p); }