Для проекта мне нужна реализация связанного списка в C, которая позволяет мне удалить последний элемент.
Однако я не знаю, как этого добиться.
Идея состояла в том, чтобы создать функцию (deleteLast), которая выполняет итерации по списку до тех пор, пока следующий из следующего элемента не станет равным NULL (так, пока не будет достигнут второй последний элемент), чтобы затем освободить ссылку на последний элемент.
Тем не менее, я получаю сообщение об ошибке "выражение должно иметь указатель на тип структуры или объединения" при попытке компиляции.
#include <stdio.h>
#include <stdlib.h>
struct cell{
int x_coord,y_coord;
struct cell *next;
} cell;
struct cell AddToList (struct cell *list, int x,int y);
int listlength(struct cell * list);
void deleteLast(struct cell **list);
struct cell AddToList(struct cell *list,int x,int y){
struct cell *new_cell;
new_cell = malloc(sizeof(struct cell));
new_cell->x_coord=x;
new_cell->y_coord=y;
printf("Added new coordinates %i %i",x,y);
}
int listlength(struct cell *list){
int i=0;
while(list->next != NULL){
i++;
}
return i;
}
//takes a pointer as reference, because in C parameters are given as values
//see: https://stackoverflow.com/a/35021864
//calls should look like deleteLast( &list )
void deleteLast(struct cell **list){
struct cell *currentcell = *list;
while(*list->next->next != NULL){ //expression must have pointer-to-struct-or-union type
//free list->next
}
}
Где ошибка?