Walk two indices toward each other from the ends of the array, swapping at each step. Stops when the indices meet or cross. Demonstrates the two-pointer pattern with the smallest possible state.

Algorithm

Canonical input [1, 2, 3, 4, 5, 6, 7] (odd length, middle element stays put) yields three swap frames and reverses to [7, 6, 5, 4, 3, 2, 1].

Basic Implementation

basic.go
package main

import "fmt"

func main() {
	arr := []int{1, 2, 3, 4, 5, 6, 7}
	left := 0
	right := len(arr) - 1
	for left < right {
		arr[left], arr[right] = arr[right], arr[left]
		left = left + 1
		right = right - 1
	}
	fmt.Println(arr)
}

Complexity

  • Time: O(n)
  • Space: O(1)

Implementation notes

  • Go: idiomatic tuple swap arr[left], arr[right] = arr[right], arr[left] keeps the swap step visible without leaning on a helper that hides the lesson; the standard library has no in-place reverse for []int.
  • left := 0 and right := len(arr) - 1 are plain int indices; the left < right guard handles the meet-in-the-middle exit honestly for the odd-length canonical input.
  • The replay shows both left and right, the values about to be swapped, and the array contents after the swap. The loop-exit frame is the moment the pointers meet.
two pointers `left` starts at index `0`, `right` starts at `n - 1`. Each loop iteration swaps `arr[left]` and `arr[right]` and moves the pointers toward each other.