List uses an array internally, which always has a fixed size, for example it uses size of 16 (usually power of two), so even if you store one item, it will hold array with size 16 with 15 being empty.
Now assume, When you store all 16 items and when you try to add 17th item, it will now create a new array of 32, (16 + 16), copy all 16 from old array to new array, and then put item on 17th place in array of 32 size.
Now, when you remove an item from 1st place, all items after 1st item, are moved to one step ahead, so 2nd becomes 1st, 3rd becomes 2nd etc etc.
Where else Linked List is made out of pointers, it is not array, it only occupies nodes that you create, and it stores references of its previous and next nodes.
For performance issues, List will work great if you are going to add/remove items very rarely but you will be iterating (reading entire list, or accessing items via index) very frequently. List will be better for random access scenarios, like you will be able to get items very fast with index specified.
Linked list will work great if you are going to add/remove items very frequently, but you will be iterating it (entire list) rarely. Linked list will be more appropriate for sequential access, where you will navigate back or front from current node, but it will be of very poor performance when you will try to find indexed items.