Чтобы "создать связанный список в стеке", обычно вы используете функцию, подобную alloca, чтобы получить больше стековой памяти. Однако это не похоже на то, что вас просят сделать.
Звучит так, как будто вы должны хранить стек в стеке, а не произвольный связанный список. Как подсказка, общий синтаксис того, что вы хотите сделать:
void push(struct Node *oldHead, String elem) {
struct Node newHead;
head.fileName = elem;
head.next = oldHead.
struct Node *head = &newHead
// then you need to continue what you're doing in this function, since
// returning will effectively pop the stack.
Существуют (нетривиальные) методы для реализации полноценных списков мусора по этим направлениям, но это выходит за рамки того, что вы делаете.