1 改类型声明
pub struct List<T> { head: Link<T>,}type Link<T> = Option<Box<Node<T>>>;struct Node<T> { elem: T, next: Link<T>,}
2 修改类型实现
impl<T> List<T> { pub fn new() -> Self { List { head: None } } pub fn push(&mut self, val: T) { let node = Node { elem: val, next: self.head.take(), }; self.head = Some(Box::new(node)); } pub fn pop(&mut self) -> Option<T> { // 使用 Option::map() // 注意: map() 要求所有权;node 的类型是 Box<Node> self.head.take().map(|node| { self.head = node.next; node.elem }) }}impl<T> Drop for List<T> { fn drop(&mut self) { let mut cur_link = self.head.take(); while let Some(mut boxed_node) = cur_link { cur_link = boxed_node.next.take(); } }}