Java Reverse Questions Cheat Sheet (Full)
1. Reverse a String
String reverseString(String s) {
return new StringBuilder(s).reverse().toString();
}
// Without built-in methods (two pointers)
String reverseStringManual(String s) {
char[] arr = [Link]();
int i = 0, j = [Link] - 1;
while (i < j) {
char temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
i++; j--;
}
return new String(arr);
}
// Example:
[Link](reverseString("hello")); // olleh
2. Reverse Each Word (keep order)
String reverseEachWord(String s) {
String[] words = [Link](" ");
StringBuilder result = new StringBuilder();
for (int i = 0; i < [Link]; i++) {
[Link](new StringBuilder(words[i]).reverse());
if (i < [Link] - 1) [Link](" ");
}
return [Link]();
}
// Example:
[Link](reverseEachWord("i like java")); // i ekil avaj
3. Reverse Order of Words
String reverseOrder(String s) {
String[] words = [Link](" ");
StringBuilder result = new StringBuilder();
for (int i = [Link] - 1; i >= 0; i--) {
[Link](words[i]);
if (i > 0) [Link](" ");
}
return [Link]();
}
// Example:
[Link](reverseOrder("i like java")); // java like i
4. Reverse Words + Order
String reverseWordsAndOrder(String s) {
String[] words = [Link](" ");
StringBuilder result = new StringBuilder();
for (int i = [Link] - 1; i >= 0; i--) {
[Link](new StringBuilder(words[i]).reverse());
if (i > 0) [Link](" ");
}
return [Link]();
}
// Example:
[Link](reverseWordsAndOrder("i like java")); // avaj ekil i
5. Reverse Only Vowels
String reverseVowels(String s) {
char[] arr = [Link]();
int i = 0, j = [Link] - 1;
String vowels = "aeiouAEIOU";
while (i < j) {
while (i < j && ) i++;
while (i < j && ) j--;
char temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
i++; j--;
}
return new String(arr);
}
// Example:
[Link](reverseVowels("hello")); // holle
6. Reverse Without Affecting Special Characters
String reverseButKeepSpecial(String s) {
char[] arr = [Link]();
int i = 0, j = [Link] - 1;
while (i < j) {
if () i++;
else if () j--;
else {
char temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
i++; j--;
}
}
return new String(arr);
}
// Example:
[Link](reverseButKeepSpecial("a,b$c")); // c,b$a
7. Reverse a Number
int reverseNumber(int n) {
int rev = 0;
while (n != 0) {
int digit = n % 10;
rev = rev * 10 + digit;
n /= 10;
}
return rev;
}
// Example:
[Link](reverseNumber(12345)); // 54321
8. Reverse Linked List
class ListNode {
int val;
ListNode next;
ListNode(int val) { [Link] = val; }
}
ListNode reverseList(ListNode head) {
ListNode prev = null, curr = head;
while (curr != null) {
ListNode next = [Link];
[Link] = prev;
prev = curr;
curr = next;
}
return prev;
}
// Example:
// Input: 1 -> 2 -> 3
// Output: 3 -> 2 -> 1
9. Reverse Array in Groups of k
void reverseInGroups(int[] arr, int k) {
for (int i = 0; i < [Link]; i += k) {
int l = i, r = [Link](i + k - 1, [Link] - 1);
while (l < r) {
int temp = arr[l]; arr[l] = arr[r]; arr[r] = temp;
l++; r--;
}
}
}
// Example:
int[] arr = {1,2,3,4,5,6,7,8};
reverseInGroups(arr, 3);
// Output: [3,2,1,6,5,4,8,7]
10. Reverse Substring Between Indices
String reverseSubstring(String s, int l, int r) {
char[] arr = [Link]();
while (l < r) {
char temp = arr[l]; arr[l] = arr[r]; arr[r] = temp;
l++; r--;
}
return new String(arr);
}
// Example:
[Link](reverseSubstring("abcdefg", 2, 5)); // abfedcg
11. Reverse Every Alternate Word
String reverseAlternateWords(String s) {
String[] words = [Link](" ");
StringBuilder result = new StringBuilder();
for (int i = 0; i < [Link]; i++) {
if (i % 2 == 1) {
[Link](new StringBuilder(words[i]).reverse());
} else {
[Link](words[i]);
}
if (i < [Link] - 1) [Link](" ");
}
return [Link]();
}
// Example:
[Link](reverseAlternateWords("i love coding very much"));
// Output: i evol coding yrev much
12. Palindrome Check (using reverse)
boolean isPalindrome(String s) {
String clean = [Link]("[^a-zA-Z0-9]", "").toLowerCase();
String rev = new StringBuilder(clean).reverse().toString();
return [Link](rev);
}
// Example:
[Link](isPalindrome("A man, a plan, a canal: Panama")); // true
13. Reverse Linked List (Recursive)
ListNode reverseListRecursive(ListNode head) {
if (head == null || [Link] == null) return head;
ListNode rest = reverseListRecursive([Link]);
[Link] = head;
[Link] = null;
return rest;
}
// Example: Input 1->2->3 -> Output 3->2->1
14. Reverse Level Order in Binary Tree
class TreeNode {
int val; TreeNode left, right;
TreeNode(int val) { [Link] = val; }
}
List<List<Integer>> reverseLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) return res;
Queue<TreeNode> q = new LinkedList<>();
[Link](root);
while (![Link]()) {
int size = [Link]();
List<Integer> level = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode node = [Link]();
[Link]([Link]);
if ([Link] != null) [Link]([Link]);
if ([Link] != null) [Link]([Link]);
}
[Link](0, level); // add to front to reverse
}
return res;
}
// Example: Binary tree level order reversed