added linked_list from https://github.com/jlkiri/rust-data-structures/blob/master/src/linked_list.rs
This commit is contained in:
parent
5e50828627
commit
81e45fb571
1 changed files with 39 additions and 0 deletions
|
|
@ -232,3 +232,42 @@ impl<T> Stack<T> {
|
||||||
self.stack.last()
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue