Singly-linked list/Element removal: Difference between revisions
Content added Content deleted
(Added Kotlin) |
|||
Line 111: | Line 111: | ||
</lang> |
</lang> |
||
No label, no nasty literal GO TO - even though an "END DO" hides one. |
No label, no nasty literal GO TO - even though an "END DO" hides one. |
||
=={{header|Kotlin}}== |
|||
<lang scala>// version 1.1.1 |
|||
class Node<T: Number>(var data: T, var next: Node<T>? = null) { |
|||
override fun toString(): String { |
|||
val sb = StringBuilder(this.data.toString()) |
|||
var node = this.next |
|||
while (node != null) { |
|||
sb.append(" -> ", node.data.toString()) |
|||
node = node.next |
|||
} |
|||
return sb.toString() |
|||
} |
|||
} |
|||
fun <T: Number> insertAfter(prev: Node<T>, new: Node<T>) { |
|||
new.next = prev.next |
|||
prev.next = new |
|||
} |
|||
fun <T: Number> remove(first: Node<T>, removal: Node<T>) { |
|||
if (first === removal) |
|||
first.next = null |
|||
else { |
|||
var node: Node<T>? = first |
|||
while (node != null) { |
|||
if (node.next === removal) { |
|||
val next = removal.next |
|||
removal.next = null |
|||
node.next = next |
|||
return |
|||
} |
|||
node = node.next |
|||
} |
|||
} |
|||
} |
|||
fun main(args: Array<String>) { |
|||
val b = Node(3) |
|||
val a = Node(1, b) |
|||
println("Before insertion : $a") |
|||
val c = Node(2) |
|||
insertAfter(a, c) |
|||
println("After insertion : $a") |
|||
remove(a, c) // remove node we've just inserted |
|||
println("After 1st removal : $a") |
|||
remove(a, b) // remove last node |
|||
println("After 2nd removal : $a") |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Before insertion : 1 -> 3 |
|||
After insertion : 1 -> 2 -> 3 |
|||
After 1st removal : 1 -> 3 |
|||
After 2nd removal : 1 |
|||
</pre> |
|||
=={{header|Visual Basic .NET}}== |
=={{header|Visual Basic .NET}}== |