Advertisement
Guest User

Untitled

a guest
Sep 17th, 2014
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. fn main()
  2. {
  3. let mut l: LinkedList<int> = LinkedList::new();
  4. l = l.prepend(5);
  5. l = l.prepend(2);
  6. l = l.prepend(8);
  7. l = l.prepend(100);
  8. for n in l.iter() {
  9. println!("{}", n);
  10. }
  11. }
  12.  
  13.  
  14. enum LinkedList<T>
  15. {
  16. Node(T, Box<LinkedList<T>>),
  17. Nil
  18. }
  19.  
  20. struct LinkedListIterator<T>
  21. {
  22. current_node: Box<LinkedList<T>>
  23. }
  24.  
  25. impl<T> LinkedList<T>
  26. {
  27. fn new() -> LinkedList<T> {
  28. Nil
  29. }
  30.  
  31. fn prepend(self, item: T) -> LinkedList<T> {
  32. Node(item, box self)
  33. }
  34.  
  35. fn get(self, index: u32) -> Option<T> {
  36. if index == 0 {
  37. match self {
  38. Nil => None,
  39. Node(val, _) => Some(val)
  40. }
  41. } else {
  42. match self {
  43. Nil => None,
  44. Node(_, next) => next.get(index - 1)
  45. }
  46. }
  47. }
  48.  
  49. fn iter(self) -> LinkedListIterator<T> {
  50. LinkedListIterator<T> { current_node: self }
  51. }
  52.  
  53. }
  54.  
  55. impl<T> Iterator<T> for LinkedListIterator<T>
  56. {
  57. fn next(&mut self) -> Option<T> {
  58. match self.current_node {
  59. Node(val, next_node) => {
  60. self = next_node;
  61. Some(val)
  62. }
  63. Nil => None
  64. }
  65. }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement