How would you reverse a string using a two-pointer approach? Write code to handle edge cases cleanly.
Implement reverse_string(s) using a mutable character list and return the reversed string. The function must correctly handle empty strings, one-character strings, whitespace, punctuation, and repeated characters.
def reverse_string(s):