Reverse a string or linked list using recursion.
Implement the string version using reverse_string(s), returning a new reversed string without using slicing or built-in reverse helpers. A linked-list solution may be presented instead or additionally, using nodes with value and next fields and returning the new head. Handle empty and single-element inputs.
def reverse_string(s):