Как уже говорили другие, вы должны проверить l (el), а не & l, против 0 или NULL.Итак, ваша функция должна выглядеть примерно так:
void write(CELL* l) {
if (l != 0x000000) {
printf("%d \t", l->nmbr);
write(l->p);
}
}
Тем не менее, легко выполнить то же самое, используя некоторое время, избегая при этом затрат на рекурсию:
list_pos = list_head;
while (list_pos != NULL) {
printf("%d \t", list_pos->nmbr);
list_pos = list_pos -> p;
}