// A mutable singly linked list node
final class ListNode(var value: Int, var next: ListNode)
// Reverse the linked list in-place
def reverseList(head: ListNode): ListNode = {
var prev: ListNode = null // will become the new head
var current: ListNode = head // pointer to traverse the list
while (current != null) {
val nextNode = current.next // save next node
current.next = prev // reverse the link
prev = current // move prev forward
current = nextNode // move current forward
}
prev // prev is the new head
}
// Print the linked list
def printList(head: ListNode): Unit = {
var temp = head
while (temp != null) {
print(temp.value)
if (temp.next != null) print(" -> ")
temp = temp.next
}
println()
}
@main def run(): Unit = {
// Build a sample list: 1 -> 2 -> 3 -> 4 -> 5
val head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5, null)))))
println("Original list:")
printList(head)
// Reverse the list
val reversed = reverseList(head)
println("Reversed list:")
printList(reversed)
}
/*
run:
Original list:
1 -> 2 -> 3 -> 4 -> 5
Reversed list:
5 -> 4 -> 3 -> 2 -> 1
*/