Untitled

 avatar
unknown
c_cpp
a year ago
1.7 kB
4
Indexable
struct day *remove_day(struct day *day_one,
                       struct day **current_day,
                       struct date date) {

    if (compare_date(day_one->date, date) == 0) {
        struct day *new_day_one;

        free_crepe_stand(day_one);

        if (day_one -> next == NULL) {
            struct date new_date = {2024, 1, 1};
            new_day_one = create_day(new_date);
            *current_day = new_day_one;
        }
        else {
            new_day_one = day_one->next;
            if (compare_date((*current_day)->date, date) == 0) {
                *current_day = new_day_one;
            }
        }

        free(day_one);
        return new_day_one;

    }

    else {
        struct day *current = day_one;
        struct day *deleted_day;

        while(current->next != NULL && compare_date(date, current->next->date) > 0) {
            current = current->next;
        }

        if (current->next != NULL && compare_date(date, current->next->date) == 0) {

            deleted_day = current->next;

            if (compare_date((*current_day)->date, date) == 0) {
                if (deleted_day->next == NULL) {
                    *current_day = day_one;
                } else {
                    *current_day = deleted_day->next;
                }
            }

            free_crepe_stand(deleted_day);
            current->next = deleted_day->next;
            free(deleted_day);

            return day_one;
        }

    }

    return NULL;

}

void free_crepe_stand(struct day *day_one) {

    struct crepe *current = day_one->orders;
    struct crepe *next;

    while (current != NULL) {
        next = current->next;
        free(current);        
        current = current->next;
    }
}
Editor is loading...
Leave a Comment