Я бы делал не так - в каждой структуре создал бы поле таймер и минусовал его на каждом тике получилось бы намного прозначней, Ну это дело личный предпочтений. Но вот проверять список на пустоту надо, а то вить NULL->expiration както не очень получится.