add chain
This commit is contained in:
46
single_file_tests/chain.rs
Normal file
46
single_file_tests/chain.rs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
use std::rc::Rc;
|
||||||
|
use std::fmt::Display;
|
||||||
|
|
||||||
|
enum Node<T> {
|
||||||
|
Nil,
|
||||||
|
Value(T, Rc<Node<T>>),
|
||||||
|
}
|
||||||
|
|
||||||
|
fn build_chain_str() -> Node<String> {
|
||||||
|
let mut chain = Node::<String>::Nil;
|
||||||
|
for &n in &["Tom", "Jerry", "Mike"] {
|
||||||
|
let node = Node::<String>::Value(n.into(), Rc::new(chain));
|
||||||
|
chain = node;
|
||||||
|
}
|
||||||
|
chain
|
||||||
|
}
|
||||||
|
|
||||||
|
fn build_chain_usize() -> Node<usize> {
|
||||||
|
let mut chain = Node::<usize>::Nil;
|
||||||
|
for &n in &[1, 2, 3, 4, 5] {
|
||||||
|
let node = Node::<usize>::Value(n, Rc::new(chain));
|
||||||
|
chain = node;
|
||||||
|
}
|
||||||
|
chain
|
||||||
|
}
|
||||||
|
|
||||||
|
fn print_chain<T>(chain: &Node<T>) where T: Display {
|
||||||
|
let mut ptr = chain;
|
||||||
|
while let Node::Value(n, next) = ptr {
|
||||||
|
print!("{}", n);
|
||||||
|
ptr = next;
|
||||||
|
|
||||||
|
if let &Node::<T>::Value(_, _) = ptr {
|
||||||
|
print!(" -> ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let chain = build_chain_str();
|
||||||
|
print_chain(&chain);
|
||||||
|
|
||||||
|
let chain_usize = build_chain_usize();
|
||||||
|
print_chain(&chain_usize);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user