In insertion sort, if we find at index i, we have a greater element, we shift it to (i-1). Singly Linked List would be a nightmare for this. Each time we'll have to traverse all the way fro head to (i-1).
Heap sort wants random access for rearrangements (heapify). In a Linked List, there's no such thing as random access.
Even quicksort requires random access.
Merge sort is done with linear access. First we'll compare both the first elements of the two-sub lists... we all know how it goes.
Merge sort is suitable here.