data_structures/linked_list/iter_mut.rs
1use super::node::*;
2
3pub struct IterMut<'a, T>(pub Option<&'a mut Next<T>>);
4
5impl<'a, T> Iterator for IterMut<'a, T> {
6 type Item = &'a mut T;
7
8 fn next<'b>(&'b mut self) -> Option<&'a mut T> {
9 let some_node = match (*self).0.take() {
10 Some(node) => node,
11 None => return None,
12 };
13
14 (**some_node).as_mut().map(|node| {
15 (*self).0 = Some(&mut (*node).next);
16 &mut (*node).data
17 })
18 }
19}