import Foundation
// A singly linked list node (reference type)
final class ListNode {
var value: Int // data stored in the node
var next: ListNode? // pointer to the next node
init(_ value: Int, _ next: ListNode? = nil) {
self.value = value
self.next = next
}
}
// Reverse the linked list in-place
func reverseList(_ head: ListNode?) -> ListNode? {
var prev: ListNode? = nil // will become the new head
var current = head // pointer to traverse the list
while current != nil {
let nextNode = current?.next // save next node
current?.next = prev // reverse the link
prev = current // move prev forward
current = nextNode // move current forward
}
return prev // prev is the new head
}
// Print the linked list
func printList(_ head: ListNode?) {
var temp = head
while temp != nil {
print(temp!.value, terminator: "")
if temp?.next != nil { print(" -> ", terminator: "") }
temp = temp?.next
}
print()
}
// Build a sample list: 1 -> 2 -> 3 -> 4 -> 5
let head = ListNode(1,
ListNode(2,
ListNode(3,
ListNode(4,
ListNode(5)
)
)
)
)
print("Original list:")
printList(head)
// Reverse the list
let reversed = reverseList(head)
print("Reversed list:")
printList(reversed)
/*
run:
Original list:
1 -> 2 -> 3 -> 4 -> 5
Reversed list:
5 -> 4 -> 3 -> 2 -> 1
*/