functions don't need *linked*lists

these lists are only iterated, not edited, so these functions do not need *linked* lists as input, any type of list will do.

List is an interface, 
where appropriate, linked lists are still instantiated, because LLists are a very good choice when all you want to do is quickly add an unknown number of items and iterate them.
(an ArrayList would be better if we could "guess" how many elements would be needed - adding to a pre-init'd arrayList is about 4x faster).

this PR causes no runtime changes, but means that any further optimisations which produce different list types don't need another pr.