specCon18 2024-05-19 02:05:34 -04:00
parent 5e50828627
commit 81e45fb571

View file

@ -232,3 +232,42 @@ impl<T> Stack<T> {
self.stack.last()
}
}
use std::mem;
struct Node<T> {
value: T,
next: Option<Box<Node<T>>>,
}
type Link<T> = Option<Box<Node<T>>>;
pub struct List<T> {
head: Link<T>,
}
impl<T> List<T> {
pub fn new() -> Self {
List { head: None }
}
pub fn push(&mut self, item: T) {
let next_node = Box::new(Node {
value: item,
next: self.head.take(),
});
self.head = Some(next_node)
}
pub fn pop(&mut self) -> Option<T> {
self.head.take().map(|node| {
self.head = node.next;
node.value
})
}
pub fn peek(&self) -> Option<&T> {
self.head.as_ref().map(|node| &node.value)
}
}