Insertion and deletion complexities for a linked list and array I have the following table that compares different operation complexities for a linked list and array:

                        Linked List |   Array   |   Dynamic Array
Deletion at ending      O(n)        |   O(1)    |   O(n)
Insertion in middle     O(n)        |   O(n)    |   O(n)
Deletion in middle      O(n)        |   O(n)    |   O(n)


Can anyone please explain why:


Deletion for Dynamic Array is O(n)?
Insertion and deletion in middle for all data structures is O(n)?


Thanks
The array may need to be reallocated if there are too many free cells, and this costs $O(n)$ (non-amortized)
For arrays, the array portion which comes after the affected element must be moved one position left or right, so that's $O(n)$. For lists, it depends. If you have the pointer to the previous cell w.r.t. the inserted/deleted one, this can be done in $O(1)$. If you don't, and you only have the pointer to the list head, then you have to scan the list -- half the list, on average, will be scanned, costing $O(n)$.