- let new_next = match self.next {
- Some(ref mut next) if next.data == *data => next.next.take(),
- Some(ref mut next) => return next.remove_next(data),
- None => return false,
- };
- self.next = new_next;
- true
+ let mut n = self;
+ loop {
+ match n.next {
+ Some(ref mut next) if next.data == *data => {
+ n.next = next.next.take();
+ return true;
+ }
+ Some(ref mut next) => n = next,
+ None => return false,
+ }
+ }