rust数据结构之rust实现单链表

一 

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(&amp;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(&amp;mut self)-&gt;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