This commit is contained in:
Sander Hautvast 2022-02-14 12:52:53 +01:00
parent b892e70bb5
commit 71587e810c

View file

@ -9,28 +9,28 @@ fn main() {
} }
#[derive(Debug)] #[derive(Debug)]
pub struct List { pub struct List<T> {
head: Link, head: Link<T>,
} }
#[derive(Debug)] #[derive(Debug)]
enum Link { enum Link<T> {
Empty, Empty,
More(Box<Node>), More(Box<Node<T>>),
} }
#[derive(Debug)] #[derive(Debug)]
struct Node { struct Node<T> {
elem: i32, elem: T,
next: Link, next: Link<T>,
} }
impl List { impl <T> List<T> {
pub fn new() -> Self { pub fn new() -> Self {
Self { head: Link::Empty } Self { head: Link::Empty }
} }
pub fn push(&mut self, elem: i32) { pub fn push(&mut self, elem: T) {
let new_node = Node { let new_node = Node {
elem: elem, elem: elem,
next: std::mem::replace(&mut self.head, Link::Empty), next: std::mem::replace(&mut self.head, Link::Empty),
@ -38,7 +38,7 @@ impl List {
self.head = Link::More(Box::new(new_node)); self.head = Link::More(Box::new(new_node));
} }
pub fn pop(&mut self) -> Option<i32> { pub fn pop(&mut self) -> Option<T> {
match std::mem::replace(&mut self.head, Link::Empty) { match std::mem::replace(&mut self.head, Link::Empty) {
Link::Empty => None, Link::Empty => None,
Link::More(node) => { Link::More(node) => {