|
|
@@ -30,6 +30,18 @@ impl<T> List<T> {
|
|
|
self.head.as_ref().map(|node| &node.elem)
|
|
|
}
|
|
|
}
|
|
|
+impl<T> Drop for List<T> {
|
|
|
+ fn drop(&mut self) {
|
|
|
+ let mut head = self.head.take();
|
|
|
+ while let Some(node) = head {
|
|
|
+ if let Ok(mut node) = Rc::try_unwrap(node) {
|
|
|
+ head = node.next.take();
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
pub struct Iter<'a, T> {
|
|
|
next: Option<&'a Node<T>>,
|
|
|
}
|