generics
This commit is contained in:
parent
b892e70bb5
commit
71587e810c
1 changed files with 10 additions and 10 deletions
20
src/main.rs
20
src/main.rs
|
|
@ -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) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue