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}