package main
import "fmt"
func reverse(arr []int, start, end int) {
for start < end {
arr[start], arr[end] = arr[end], arr[start] // swap elements
start++ // move start forward
end-- // move end backward
}
}
func rotateRight(arr []int, k int) {
n := len(arr)
if n == 0 || k%n == 0 {
return // no rotation needed
}
k = k % n // handle rotations larger than array size
reverse(arr, 0, n-1) // reverse whole array
reverse(arr, 0, k-1) // reverse first k elements
reverse(arr, k, n-1) // reverse rest
}
func main() {
arr := []int{1, 2, 3, 4, 5}
rotateRight(arr, 2)
for i, v := range arr {
if i > 0 {
fmt.Print(" -> ")
}
fmt.Print(v)
}
fmt.Println(" -> null")
}
arr[start], arr[end] = arr[end], arr[start] // swap elements
swap elements to reverse the subarray
start++ // move start forward
advance start pointer to continue reversing
end-- // move end backward
move end pointer backward to continue reversing
if n == 0 || k%n == 0 {
return // no rotation needed
}
handle empty array or full rotation (no change)
k = k % n // handle rotations larger than array size
normalize rotation steps within array length
reverse(arr, 0, n-1) // reverse whole array
reverse entire array to prepare for rotation
reverse(arr, 0, k-1) // reverse first k elements
reverse first part to restore rotated elements order
reverse(arr, k, n-1) // reverse rest
reverse remaining part to restore order
5 -> 4 -> 1 -> 2 -> 3 -> null