Guest User

Untitled

a guest
Apr 22nd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.98 KB | None | 0 0
  1. sealed class LinkedList : Iterable<LinkedList> {
  2.  
  3. data class Node<out T>(val payload : T, var next : LinkedList = EmptyList) : LinkedList() {
  4. override fun toString() = payload.toString()
  5. }
  6.  
  7. object EmptyList : LinkedList() {
  8. override fun toString() = ""
  9. }
  10.  
  11. override fun iterator(): Iterator<LinkedList> = object :Iterator<LinkedList> {
  12.  
  13. private var nextPointer = this@LinkedList
  14.  
  15. override fun hasNext(): Boolean {
  16. return nextPointer is LinkedList.Node<*>
  17. }
  18.  
  19. override fun next(): LinkedList {
  20. val cachedNextPointer = nextPointer
  21. if (cachedNextPointer is LinkedList.Node<*>) {
  22. nextPointer = cachedNextPointer.next
  23. }
  24. return cachedNextPointer
  25. }
  26. }
  27. }
  28.  
  29. val nonEmptyList = LinkedList.Node(payload = "A", next = LinkedList.Node(payload = "B"))
  30.  
  31. fun main(args: Array<String>) {
  32. for (node in nonEmptyList) { // prints A B
  33. println(node)
  34. }
  35. }
Add Comment
Please, Sign In to add comment