Bird
Raised Fist0
DSA Cprogramming

String Reversal Approaches in DSA C

Choose your learning style10 modes available
Mental Model
Reversing a string means flipping its characters so the last becomes first and the first becomes last.
Analogy: Imagine reading a sentence backward, starting from the end and moving to the beginning, like rewinding a tape.
Original: h -> e -> l -> l -> o -> \nReversed: o -> l -> l -> e -> h -> \n↑start ↑end
Dry Run Walkthrough
Input: string: "hello"
Goal: Reverse the string so it reads "olleh"
Step 1: Swap first and last characters: 'h' and 'o'
o -> e -> l -> l -> h
Why: First and last characters must switch places to start reversal
Step 2: Swap second and second-last characters: 'e' and 'l'
o -> l -> l -> e -> h
Why: Continue swapping inward to reverse the string
Step 3: Middle character 'l' remains as is (odd length string)
o -> l -> l -> e -> h
Why: Middle character does not move in odd length strings
Result:
o -> l -> l -> e -> h
Reversed string: "olleh"
Annotated Code
DSA C
#include <stdio.h>
#include <string.h>

void reverseString(char *str) {
    int left = 0;
    int right = strlen(str) - 1;
    while (left < right) {
        // Swap characters at left and right
        char temp = str[left];
        str[left] = str[right];
        str[right] = temp;
        // Move pointers inward
        left++;
        right--;
    }
}

int main() {
    char str[] = "hello";
    reverseString(str);
    printf("%s\n", str);
    return 0;
}
while (left < right) {
loop until pointers meet or cross to cover all swaps
char temp = str[left]; str[left] = str[right]; str[right] = temp;
swap characters at left and right positions
left++; right--;
move pointers inward to next pair
OutputSuccess
olleh
Complexity Analysis
Time: O(n) because each character is visited once during swapping
Space: O(1) because reversal is done in place without extra storage
vs Alternative: Compared to creating a new reversed string (O(n) space), this approach saves memory by swapping in place
Edge Cases
empty string
function returns immediately with no changes
DSA C
while (left < right) {
single character string
no swaps occur, string remains same
DSA C
while (left < right) {
string with all same characters
swapping identical characters keeps string unchanged
DSA C
char temp = str[left];
When to Use This Pattern
When asked to reverse a string or array in place, use two pointers moving inward swapping elements to achieve reversal efficiently.
Common Mistakes
Mistake: Swapping characters without moving pointers inward causes infinite loop
Fix: Increment left and decrement right pointers after each swap
Mistake: Using a new string without freeing memory in languages like C
Fix: Prefer in-place reversal to avoid extra memory management
Summary
Reverses a string by swapping characters from ends moving inward.
Use when you need to reverse strings efficiently without extra space.
The key is two pointers swapping characters until they meet in the middle.

Practice

(1/5)
1. What does the string reversal operation do to the string "hello"?
easy
A. It changes it to "olleh"
B. It changes it to "hello" (no change)
C. It removes all vowels
D. It converts all letters to uppercase

Solution

  1. Step 1: Understand string reversal

    Reversing a string means writing its characters in the opposite order.
  2. Step 2: Apply reversal to "hello"

    The characters 'h', 'e', 'l', 'l', 'o' become 'o', 'l', 'l', 'e', 'h'.
  3. Final Answer:

    "olleh" -> Option A
  4. Quick Check:

    Reverse("hello") = "olleh" [OK]
Hint: Reverse means flip characters order [OK]
Common Mistakes:
  • Thinking reversal changes letters, not order
  • Confusing reversal with uppercase conversion
  • Assuming reversal removes characters
2. Which of the following C code snippets correctly reverses a string str in place?
easy
A. for(int i = 0; i < strlen(str)/2; i++) { char temp = str[i]; str[i] = str[strlen(str)-1-i]; str[strlen(str)-1-i] = temp; }
B. for(int i = 0; i < strlen(str); i++) { str[i] = str[strlen(str)-1-i]; }
C. strrev(str);
D. for(int i = 0; i < strlen(str); i++) { str[i] = toupper(str[i]); }

Solution

  1. Step 1: Understand in-place reversal logic

    Swap characters from start and end moving towards center, stopping at half length.
  2. Step 2: Analyze for(int i = 0; i < strlen(str)/2; i++) { char temp = str[i]; str[i] = str[strlen(str)-1-i]; str[strlen(str)-1-i] = temp; }

    It swaps str[i] with str[length-1-i] for i from 0 to half length, correctly reversing the string.
  3. Final Answer:

    Option A code correctly reverses string in place -> Option A
  4. Quick Check:

    Swapping pairs from ends reverses string [OK]
Hint: Swap pairs from ends to middle [OK]
Common Mistakes:
  • Overwriting characters without swapping
  • Using full length instead of half length in loop
  • Confusing string reversal with uppercase conversion
3. What is the output of the following C code?
char str[] = "abcde";
int i = 0, j = 4;
while(i < j) {
  char temp = str[i];
  str[i] = str[j];
  str[j] = temp;
  i++;
  j--;
}
printf("%s", str);
medium
A. abcde
B. Error: infinite loop
C. edcde
D. edcba

Solution

  1. Step 1: Trace the while loop swaps

    Swap str[0] and str[4]: 'a' and 'e' -> str = "ebcda"; i=1, j=3 Swap str[1] and str[3]: 'b' and 'd' -> str = "edcba"; i=2, j=2 Loop ends as i == j.
  2. Step 2: Print the reversed string

    After swaps, str is "edcba" which is printed.
  3. Final Answer:

    edcba -> Option D
  4. Quick Check:

    Swapped pairs reverse string [OK]
Hint: Swapping ends moves characters inward [OK]
Common Mistakes:
  • Not updating i and j correctly
  • Confusing loop condition causing infinite loop
  • Printing original string without reversal
4. Identify the error in this C code that attempts to reverse a string str:
int len = strlen(str);
for(int i = 0; i <= len/2; i++) {
  char temp = str[i];
  str[i] = str[len - i];
  str[len - i] = temp;
}
medium
A. Loop condition should be i < len/2 not <=.
B. Missing null terminator assignment after reversal.
C. Index len - i is out of bounds; should be len - i - 1.
D. Using strlen inside loop causes performance issue.

Solution

  1. Step 1: Check index usage in swapping

    String indices go from 0 to len-1. Using str[len - i] accesses one past last character (out of bounds).
  2. Step 2: Correct index to len - i - 1

    Adjusting index fixes out-of-bounds error and correctly swaps characters.
  3. Final Answer:

    Index len - i is out of bounds; should be len - i - 1 -> Option C
  4. Quick Check:

    String last index = len-1, not len [OK]
Hint: String last index = length - 1 [OK]
Common Mistakes:
  • Using length as index directly
  • Loop running one extra iteration
  • Ignoring null terminator position
5. You want to reverse only the vowels in a string "education" using C. Which approach correctly achieves this?
hard
A. Reverse entire string and then remove consonants.
B. Use two pointers from start and end, swap vowels only, skip consonants.
C. Copy vowels to a new string and print it reversed.
D. Replace vowels with uppercase letters in place.

Solution

  1. Step 1: Understand vowel-only reversal

    We must swap vowels at start and end positions, ignoring consonants.
  2. Step 2: Use two pointers approach

    Initialize pointers at string start and end, move inward skipping consonants, swap vowels when both pointers point to vowels.
  3. Step 3: Confirm other options are incorrect

    Reverse entire string and then remove consonants. reverses whole string, not vowels only. Copy vowels to a new string and print it reversed. prints vowels only, losing consonants. Replace vowels with uppercase letters in place. changes vowels but does not reverse.
  4. Final Answer:

    Two pointers swapping vowels only -> Option B
  5. Quick Check:

    Two-pointer vowel swap reverses vowels [OK]
Hint: Swap vowels with two pointers, skip consonants [OK]
Common Mistakes:
  • Reversing entire string instead of vowels only
  • Removing consonants accidentally
  • Changing vowels without reversing
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard