1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#[derive(PartialEq, Eq, Clone, Debug)] pub struct ListNode { pub val: i32, pub next: ListLink, } #[macro_export] macro_rules! list { () => { None }; ($e:expr) => { ListLink::link($e, None) }; ($e:expr, $($tail:tt)*) => { ListLink::link($e, list!($($tail)*)) }; } pub type ListLink = Option<Box<ListNode>>; pub trait ListMaker { fn link(val: i32, next: ListLink) -> ListLink { Some(Box::new(ListNode { val, next })) } } impl ListMaker for ListLink {}