#[derive(Debug,PartialEq,Clone)]
pub struct Node<T>{
pub data : T,
pub next : Option<Box<Node<T>>>
}
#[derive(Debug,PartialEq,Clone)]
pub struct LinkedList<T>{
pub head : Option<Box<Node<T>>>
}
use std::fmt::Debug;
impl<T:Debug> LinkedList<T> {
pub fn new()-> Self{
LinkedList { head : None}
}
pub fn is_empty(&self)-> bool{
self.head.is_none()
}
pub fn push(&mut self, data : T){
let new_node = Box::new(
Node{
data,
next : self.head.take(),
}
);
self.head = Some(new_node);
}
pub fn pop(&mut self){
self.head.take().map(
|node|
self.head = node.next
);
}
pub fn print_list(&self){
let mut current_node = &self.head;
while let Some(node) = current_node {
print!("{:?}->",node.data);
current_node = &node.next;
}
println!("None");
}
pub fn len(&self)->usize{
let mut count = 0;
let mut current_node = &self.head;
while let Some(node) = current_node {
count += 1;
current_node = &node.next;
}
count
}
}