Значит препод - дурак.
Классический подход к построению связанных списков - записи (record в паскале, struct в C/C++). Классы используются только там, где нет других возможностей (Java, например; там все - классы).
А вот контейнер - это уже должен быть класс (хотя в последних версиях можно сделать и с помощью записей, благо теперь появилась возможности делать методы в записях (хотя я и противник этого).
Да, для нормального функционирования еще надо написать правильный деструктор, который освободит память, занятую списком. На самом деле сделаем 2 метода: очистку (clear) и сам деструктор:
Код:
procedure TFileCatalog.Clear;
var
Item : PFileItem;
begin
While FHead <> Nil Do
Begin
Item := FHead;
FHead := FHead.Next;
Dispose(Item);
End;
end;
destructor TFileCatalog.Destroy; override;
begin
Clear;
inherited;
end;
ЗЫ. TFail - это не файл, это ФЭЙЛ

Просто обратил внимание
