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

2020-12-29

一 

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