The prototype returns a pointer to a sorted list? Just like insertNode(), it would probably make more sense to implement the head as a reference. The return value could then be saved.
sortList(struct Student** head);
There are obviously two lists here, each to be sorted alphabetically. It would probably make sense to declare a separate head for each list. Then iterate through the original list and insert the current element into the appropriate list. Finally, concatenate the two lists and assign the new head, done.