Start here. This is the direct spoken answer to practice first.
Why this question matters
The three types all hold ordered values, but their storage and mutation models differ enough to affect both API design and runtime behavior.
I use an array when the size is fixed or when an API specifically needs contiguous storage. I use List<T> for most growable ordered collections because it gives fast indexed access, append, and iteration over a contiguous backing array. I reserve LinkedList<T> for cases where I already have a node and need frequent insertion or removal around it. It is not automatically faster for general insertion because finding the position still costs time.