Bevor dynamic arrays existed, linked lists where one of the very few ways of creating lists with a variable length. Today, there are other ways of achieving that, but linked lists are still quite useful and they can be very fast for certain operations.

Linked lists come in all kinds of "flavors". A stack is a linked list, a queue is a linked list, etc.

I rarely use linked lists if all I need a dynamic array because in most cases, it won't give you any performance advantages. For stacks however, linked lists are perfect and they will outperform any array or collection.