一
fn main(){
let mut list:List<String> = List::new();
list.push(String::from("fuck"));
list.push(String::from("fuck1"));
list.push(String::from("fuck2"));
let a = list.pop();
println!("after pop,length is:{}",list.length);
println!("{}",a);
let a = list.pop();
println!("after pop,length is:{}",list.length);
println!("{}",a);
let a = list.pop();
println!("after pop,length is:{}",list.length);
println!("{}",a);
}
struct List<T>{
length:i32,
head:Option<Box<Node<T>>>
}
struct Node<T>{
value:T,
next:Option<Box<Node<T>>>
}
impl <T> List<T>{
fn new()->List<T>{
List{
length:0,
head:None
}
}
fn push(&mut self, s:T){
let tem = self.head.take();
let n = Node{
value:s,
next:tem
};
self.head=Some(Box::new(n));
self.length=self.length+1
}
fn pop(&mut self)->T{
let next=self.head.take();
let value = next.unwrap();
self.length=self.length-1;
self.head=value.next;
return value.value;
}
}
//
after pop,length is:2
fuck2
after pop,length is:1
fuck1
after pop,length is:0
fuck