// Agranda una lista de asientos, y escribe el primero y el último.
#include <stdio.h>
#include <stdlib.h>

struct seat_list {
    int *seats;
    int count;
};

// Cambia la lista por otra del doble de largo, con los mismos asientos al inicio.
static int double_list(struct seat_list *list) {
    int *bigger = malloc(2 * list->count * sizeof *bigger);
    if (bigger == NULL) {
        return 0;
    }
    for (int i = 0; i < list->count; i++) {
        bigger[i] = list->seats[i];
        bigger[list->count + i] = list->seats[i] + 100;
    }
    free(list->seats);
    list->seats = bigger;
    list->count = 2 * list->count;
    return 1;
}

int main(void) {
    struct seat_list list;
    list.count = 3;
    list.seats = malloc(list.count * sizeof *list.seats);
    if (list.seats == NULL) {
        return 1;
    }
    for (int i = 0; i < list.count; i++) {
        list.seats[i] = i + 1;
    }

    int *first = list.seats;
    if (!double_list(&list)) {
        free(list.seats);
        return 1;
    }

    printf("primero: %d, último: %d\n", *first, list.seats[list.count - 1]);
    free(list.seats);
    return 0;
}
