Reverse an Array
Problem Statement
Given an array of elements, the task is to reverse the array such that the first element becomes the last, the second becomes the second last, and so on.
You must reverse the array without changing the elements themselves, only their positions.
Why This Problem Is Important
Reversing an array is one of the most fundamental problems in data structures and is frequently used as a building block in more complex problems such as:
- Array rotation
- Palindrome checking
- Two-pointer technique
- String reversal
- Data preprocessing
This problem tests your understanding of:
- Array indexing
- Traversal logic
- In-place modification
- Space optimization
Input and Output Format
Input
Array: [10, 20, 30, 40, 50]
Output
Reversed Array: [50, 40, 30, 20, 10]
Approaches to Solve the Problem
Approach 1: Using an Extra Array
- Create a new array
- Copy elements from the end of original array to the beginning of new array
- Uses extra space
Approach 2: In-place Reversal (Two-Pointer Method)
- Swap elements from start and end
- Move pointers towards the center
- Space efficient (preferred)
We will implement the in-place two-pointer approach.

Algorithm (Step-by-Step)
- Initialize two pointers:
- left = 0
- right = n - 1
- While left < right:
- Swap arr[left] and arr[right]
- Increment left
- Decrement right
- Stop when pointers cross
Pseudocode
left = 0
right = n - 1
while left < right:
swap(arr[left], arr[right])
left = left + 1
right = right - 1
Dry Run Example
Initial Array: [10, 20, 30, 40, 50]
left = 0, right = 4 → swap(10, 50)
[50, 20, 30, 40, 10]
left = 1, right = 3 → swap(20, 40)
[50, 40, 30, 20, 10]
left = 2, right = 2 → stop
Time and Space Complexity
| Metric | Value |
|---|---|
| Time Complexity | O(n) |
| Space Complexity | O(1) |
Language-wise Implementation
C Implementation
#include
int main() {
int arr[] = {10, 20, 30, 40, 50};
int n = sizeof(arr) / sizeof(arr[0]);
int left = 0, right = n - 1;
while(left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
printf("Reversed Array: ");
for(int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
Output
Reversed Array: 50 40 30 20 10
C++ Implementation
#include
using namespace std;
int main() {
int arr[] = {10, 20, 30, 40, 50};
int n = sizeof(arr) / sizeof(arr[0]);
int left = 0, right = n - 1;
while(left < right) {
swap(arr[left], arr[right]);
left++;
right--;
}
cout << "Reversed Array: ";
for(int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
Output
Reversed Array: 50 40 30 20 10
Java Implementation
public class Main {
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50};
int left = 0, right = arr.length - 1;
while(left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
System.out.print("Reversed Array: ");
for(int value : arr) {
System.out.print(value + " ");
}
}
}
Output
Reversed Array: 50 40 30 20 10
Python Implementation
arr = [10, 20, 30, 40, 50]
left = 0
right = len(arr) - 1
while left < right:
arr[left], arr[right] = arr[right], arr[left]
left += 1
right -= 1
print("Reversed Array:", arr)
Output
Reversed Array: [50, 40, 30, 20, 10]
C# Implementation
using System;
class Program {
static void Main() {
int[] arr = {10, 20, 30, 40, 50};
int left = 0, right = arr.Length - 1;
while(left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
Console.Write("Reversed Array: ");
foreach(int value in arr) {
Console.Write(value + " ");
}
}
}
Output
Reversed Array: 50 40 30 20 10
JavaScript Implementation
let arr = [10, 20, 30, 40, 50];
let left = 0;
let right = arr.length - 1;
while (left < right) {
let temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
console.log("Reversed Array:", arr);
Output
Reversed Array: [50, 40, 30, 20, 10]
Common Mistakes
- Using extra space when not required
- Incorrect loop condition (left <= right)
- Forgetting to update pointers
- Printing array before reversal
Interview Variations
- Reverse array using recursion
- Reverse only part of an array
- Reverse array in groups of size K
- Reverse without using temporary variable
Summary
Reversing an array is a classic problem that introduces the concept of in-place modification using pointers. The two-pointer approach is highly efficient because it avoids the use of additional memory and completes the operation in linear time. Understanding this problem builds a strong foundation for more advanced techniques like array rotation, sliding window, and two-pointer based optimizations. Mastering this logic ensures clarity in index handling and prepares you for real-world scenarios where space and performance are critical.
Next Problem in the Series
Print Alternate Elements of an Array
