1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use std::mem;
#[derive(Debug)]
pub struct Linked(usize, Option<Box<Linked>>);
impl Linked {
pub fn new(index: usize) -> Linked {
Linked(index, None)
}
pub fn prepend(&mut self, new_index: usize) {
let old_tail = mem::replace(&mut self.1, None);
let old = Linked(self.0, old_tail);
*self = Linked(new_index, Some(Box::new(old)));
}
pub fn prepop(&mut self) -> usize {
let index = self.0;
*self = *mem::replace(&mut self.1, None)
.expect("Can not pop back past root link");
return index;
}
pub fn peek(&self) -> usize { self.0 }
}