Для начала объявление структуры в typedef
typedef struct _ttl_t {
int x;
int y;
int value;
int ttl;
struct ttl *next;
} ttl_t;
неверно. struct _ttl_t
и struct ttl
- это два разных типа. Я думаю, что вы имеете в виду
typedef struct _ttl_t {
int x;
int y;
int value;
int ttl;
struct _ttl_t *next;
} ttl_t;
Этот цикл
while (curr){
if (curr->ttl<1){
head=curr->next;
free(curr);
}
curr=curr->next;
}
также неверен, потому что, если узел имеет элемент данных ttl
меньше 1, головной узел изменяется, хотя его собственные данныеэлемент ttl
может быть больше или равен 1.
Функция может быть определена проще, если передать головной узел по ссылке через указатель.
Например
void remove_ttl( ttl_t **head )
{
while ( *head != NULL )
{
if ( ( *head )->ttl < 1 )
{
ttl_t *tmp = *head;
*head = ( *head )->next;
free( tmp );
}
else
{
head = &( *head )->next;
}
}
}