Поле next имеет тип Item, значит и переменная list тоже должна иметь тип Item, а не ItemExt.

Ведь для того чтобы пробежаться по списку всё-равно нужно будет делать приведение типа --так почему же для головы списка сделано особое отдельное исключение?

Объявляем list как просто Item:
## Код:
```
VAR list: Item;
  new1: ItemExt1;
  new2: ItemExt2;
...
Add(list, new1);
Add(list, new2);
```

и приведения типов в процедуре Add делать не надо.