Values & References15 / 18
Up next

Two-pointer reverse

#include <stdio.h>

void reverse(int *a, size_t n) {
    int *lo = a;
    int *hi = a + n - 1;
    while (lo < hi) {
        int tmp = *lo;
        *lo = *hi;
        *hi = tmp;
        lo++;
        hi--;
    }
}

int main(void) {
    int a[] = {1, 2, 3, 4, 5};
    reverse(a, 5);
    for (size_t i = 0; i < 5; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}
What you're solving

walk from both ends inward