题目
从标准输入读入 n 个整数,使用纯指针方式(双指针相向收缩)实现数组元素的就地逆序并输出。
输入格式:第一行输入元素个数 n;第二行输入 n 个整数。
输出格式:在一行中输出逆序后的数组,以空格分隔,末尾换行。
数据范围与约定:1 ≤ n ≤ 500。
思路与算法
1. 头尾指针界定
左指针指向数组首地址 int[]l = a;,右指针指向尾元素地址 int[]r = a + n - 1;。
2. 解引用交换
循环条件为 l < r。交换解引用值 int t = *l; *l = *r; *r = t;,然后左右指针同时靠拢 l++; r--;。
完整程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
// 双指针相向收缩就地逆序
int l = 0, r = n - 1;
while (l < r) {
int t = a[l];
a[l] = a[r];
a[r] = t;
l++;
r--;
}
for (int i = 0; i < n; i++) {
System.out.print(a[i] + (i + 1 < n ? " " : "\n"));
}
}
}运行示例
输入:
4
1 2 3 4输出:
4 3 2 1