Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sealed class LinkedList : Iterable<LinkedList> {
- data class Node<out T>(val payload : T, var next : LinkedList = EmptyList) : LinkedList() {
- override fun toString() = payload.toString()
- }
- object EmptyList : LinkedList() {
- override fun toString() = ""
- }
- override fun iterator(): Iterator<LinkedList> = object :Iterator<LinkedList> {
- private var nextPointer = this@LinkedList
- override fun hasNext(): Boolean {
- return nextPointer is LinkedList.Node<*>
- }
- override fun next(): LinkedList {
- val cachedNextPointer = nextPointer
- if (cachedNextPointer is LinkedList.Node<*>) {
- nextPointer = cachedNextPointer.next
- }
- return cachedNextPointer
- }
- }
- }
- val nonEmptyList = LinkedList.Node(payload = "A", next = LinkedList.Node(payload = "B"))
- fun main(args: Array<String>) {
- for (node in nonEmptyList) { // prints A B
- println(node)
- }
- }
Add Comment
Please, Sign In to add comment