SentinelOne telemetry processing may require reversing a sequence before further analysis. Write a function that reverses either a string or a list without using built-in reverse functions, slicing-based reversal, or library helpers that directly reverse the input.
Return a new sequence in reverse order. The original list must remain unchanged. For a string, return a string. For a list, return a list containing the same elements in reverse order.
Implement reverse_sequence(sequence), where sequence is either a string or a list of values. The function returns the same sequence type with its elements ordered from last to first. An empty input is valid.
Use a two-pointer approach that swaps elements from the outside toward the center. Do not call reverse(), reversed(), or use reverse slicing such as [::-1].
def reverse_sequence(sequence):