Isn't prepending the efficient operation? Appending would require mutation or copying, prepending only requires a single new cons cell.
Appending to a linked list is fine if you can mutate and keep a pointer to the tail, but then again, extending mutable arrays is also amortized O(1) assuming a reasonable allocation scheme.