Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.75 KB | None | 0 0
  1. indirect enum LinkedList<T> {
  2. case value(element: T, next: LinkedList<T>)
  3. case end
  4. }
  5.  
  6. extension LinkedList: Sequence {
  7. func makeIterator() -> LinkedListIterator<T> {
  8. return LinkedListIterator(current: self)
  9. }
  10. }
  11.  
  12. struct LinkedListIterator<T>: IteratorProtocol {
  13. var current: LinkedList<T>
  14.  
  15. mutating func next() -> T? {
  16. switch current {
  17. case . value(let element, let next):
  18. self.current = next
  19. return element
  20. case .end:
  21. return nil
  22. }
  23. }
  24. }
  25.  
  26. let x3: LinkedList<Int> = .end
  27. let x2: LinkedList<Int> = .value(element: 3, next: x3)
  28. let x1: LinkedList<Int> = .value(element: 32, next: x2)
  29. let x: LinkedList<Int> = .value(element: 23, next: x1)
  30.  
  31. x.forEach {
  32. print($0)
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement