Чего не хватает в моей попытке создать кучу связанного списка?
Моя цель - получить приведенный ниже код для генерации последовательности [1, 2, 3] в стеке, а затем распечатать эти значения в отдельных строках без использования Box
или чего-либо еще, требующего кучи или std
или malloc
.
Я пролистал https://rust -unofficial.github.io / too-many-lists но, похоже, все "хорошие" списки зависят от Rc
, Box
и т. Д.
Ящик heapless
аккуратен, но требует заранее знать размер списка.
Мой Google-фу недостаточно силен, чтобы найти большую помощь. Любые указатели будут высоко оценены. Но вот что я думаю:
struct Node<'a, T> {
value: T,
next: Option<&'a Node<'a, T>>
}
struct List<'a, T> {
head: Option<&'a Node<'a, T>>,
tail: Option<&'a Node<'a, T>>
}
impl<'a, T> List<'a, T> {
fn new() -> Self {
Self {
head: None,
tail: None
}
}
fn push(self, value: T) ->Self {
unimplemented!(); // What's missing here?
}
}
struct Iter<'a, T> {
next: Option<&'a Node<'a, T>>
}
impl<'a, T> Iterator for Iter<'a, T> {
type Item = &'a T;
fn next(&mut self) -> Option<&'a T> {
match self.next.take() {
Some(next) => {
self.next = next.next;
Some(&next.value)
},
None => None
}
}
}
impl<'a, T> IntoIterator for List<'a, T> {
type Item = &'a T;
type IntoIter = Iter<'a, T>;
fn into_iter(self) -> Self::IntoIter {
Iter {
next: self.head
}
}
}
fn main() {
let list = List::new();
let list = list.push(1);
let list = list.push(2);
let list = list.push(3);
for item in list {
println!("{}", item);
}
}
Как видите, я застрял, пытаясь реализовать List.push
.