[상용 데이터 구조 및 응용] 알고리즘 노트 - 링크
use List::*;
enum List {
// Cons: ,
Cons(u32, Box<List>),
// Nil: ,
Nil,
}
// enum
impl List {
//
fn new() -> List {
// `Nil` `List`
Nil
}
// ,
fn prepend(self, elem: u32) -> List {
// `Cons` List
Cons(elem, Box::new(self))
}
//
fn len(&self) -> u32 {
// `self` , `self`
// `self` `&List` ,`*self` `List` , `T`
// `&T`
match *self {
// tail , `self` ;
// tail
Cons(_, ref tail) => 1 + tail.len(),
// : 0
Nil => 0
}
}
// ( )
fn stringify(&self) -> String {
match *self {
Cons(head, ref tail) => {
// `format!` `print!` , ,
//
format!("{}, {}", head, tail.stringify())
},
Nil => {
format!("Nil")
},
}
}
}
fn main() {
//
let mut list = List::new();
//
list = list.prepend(1);
list = list.prepend(2);
list = list.prepend(3);
//
println!("linked list has length: {}", list.len());
println!("{}", list.stringify());
}