use std::cell::RefCell;
use std::rc::Rc;
#[derive(Debug)]
struct Node {
value: i32,
next: Option<Rc<RefCell<Node>>>,
}
fn main() {
let first = Rc::new(RefCell::new(Node { value: 1, next: None }));
let second = Rc::new(RefCell::new(Node { value: 2, next: None }));
first.borrow_mut().next = Some(Rc::clone(&second));
second.borrow_mut().next = Some(Rc::clone(&first)); // Creates a cycle, but managed by Rc and RefCell
println!("First node: {:?}", first);
}
When dealing with complex data structures or APIs, you may need to specify lifetimes explicitly to ensure that references are managed correctly. This section will cover advanced cases, such as struct lifetimes, method lifetimes, and multiple lifetimes.