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()
|
||||
}
|
||||
}
|
||||
|
||||
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