Bird
Raised Fist0
DSA C++programming~20 mins

Reverse a Singly Linked List Iterative in DSA C++ - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Linked List Reversal Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of reversing a linked list with 3 nodes
What is the printed linked list after reversing it iteratively?
DSA C++
struct Node {
    int data;
    Node* next;
    Node(int val) : data(val), next(nullptr) {}
};

Node* reverseList(Node* head) {
    Node* prev = nullptr;
    Node* curr = head;
    while (curr != nullptr) {
        Node* nextTemp = curr->next;
        curr->next = prev;
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}

int main() {
    Node* head = new Node(1);
    head->next = new Node(2);
    head->next->next = new Node(3);
    head = reverseList(head);
    Node* temp = head;
    while (temp != nullptr) {
        std::cout << temp->data << " -> ";
        temp = temp->next;
    }
    std::cout << "null" << std::endl;
    return 0;
}
A3 -> 1 -> 2 -> null
B1 -> 2 -> 3 -> null
Cnull
D3 -> 2 -> 1 -> null
Attempts:
2 left
💡 Hint
Think about how the pointers change direction in each iteration.
❓ Predict Output
intermediate
2:00remaining
Output when reversing an empty linked list
What is the output when the linked list is empty (head is nullptr) and reversed iteratively?
DSA C++
struct Node {
    int data;
    Node* next;
    Node(int val) : data(val), next(nullptr) {}
};

Node* reverseList(Node* head) {
    Node* prev = nullptr;
    Node* curr = head;
    while (curr != nullptr) {
        Node* nextTemp = curr->next;
        curr->next = prev;
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}

int main() {
    Node* head = nullptr;
    head = reverseList(head);
    if (head == nullptr) {
        std::cout << "null" << std::endl;
    } else {
        Node* temp = head;
        while (temp != nullptr) {
            std::cout << temp->data << " -> ";
            temp = temp->next;
        }
        std::cout << "null" << std::endl;
    }
    return 0;
}
ASegmentation fault
B0 -> null
Cnull
DEmpty list
Attempts:
2 left
💡 Hint
Reversing an empty list should still be empty.
🔧 Debug
advanced
2:00remaining
Identify the bug in this iterative reversal code
What error will this code cause when reversing a linked list iteratively?
DSA C++
Node* reverseList(Node* head) {
    Node* prev = nullptr;
    Node* curr = head;
    while (curr != nullptr) {
        Node* nextTemp = curr->next;
        curr->next = curr;  // Bug here
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}
AInfinite loop due to self-pointing node
BSegmentation fault due to null pointer
CCorrect reversal output
DCompilation error
Attempts:
2 left
💡 Hint
Check what happens when a node points to itself.
❓ Predict Output
advanced
2:00remaining
Output after reversing a 5-node linked list
What is the printed linked list after reversing this 5-node list iteratively?
DSA C++
struct Node {
    int data;
    Node* next;
    Node(int val) : data(val), next(nullptr) {}
};

Node* reverseList(Node* head) {
    Node* prev = nullptr;
    Node* curr = head;
    while (curr != nullptr) {
        Node* nextTemp = curr->next;
        curr->next = prev;
        prev = curr;
        curr = nextTemp;
    }
    return prev;
}

int main() {
    Node* head = new Node(10);
    head->next = new Node(20);
    head->next->next = new Node(30);
    head->next->next->next = new Node(40);
    head->next->next->next->next = new Node(50);
    head = reverseList(head);
    Node* temp = head;
    while (temp != nullptr) {
        std::cout << temp->data << " -> ";
        temp = temp->next;
    }
    std::cout << "null" << std::endl;
    return 0;
}
A10 -> 20 -> 30 -> 40 -> 50 -> null
B50 -> 40 -> 30 -> 20 -> 10 -> null
Cnull
D50 -> 30 -> 40 -> 20 -> 10 -> null
Attempts:
2 left
💡 Hint
The reversal flips the order of all nodes.
🧠 Conceptual
expert
2:00remaining
Why does iterative reversal use three pointers?
In the iterative reversal of a singly linked list, why do we need to keep track of three pointers: prev, curr, and nextTemp?
ATo safely reverse links without losing access to the rest of the list
BTo create a new list instead of modifying the original
CTo count the number of nodes during reversal
DTo sort the list while reversing it
Attempts:
2 left
💡 Hint
Think about what happens if you lose track of the next node.

Practice

(1/5)
1. What is the main purpose of the iterative method to reverse a singly linked list?
easy
A. To sort the nodes in ascending order
B. To change the direction of the links between nodes one by one
C. To delete all nodes from the list
D. To create a new linked list with the same elements

Solution

  1. Step 1: Understand the linked list structure

    A singly linked list has nodes connected by pointers going one way only.
  2. Step 2: Purpose of iterative reversal

    The iterative method changes each node's pointer to point backward, reversing the list.
  3. Final Answer:

    To change the direction of the links between nodes one by one -> Option B
  4. Quick Check:

    Reversing = Changing links direction [OK]
Hint: Think of flipping arrows between nodes one at a time [OK]
Common Mistakes:
  • Confusing reversal with deletion
  • Thinking it sorts the list
  • Assuming it creates a new list
2. Which of the following is the correct syntax to initialize the previous pointer to NULL in C++ before starting the reversal?
easy
A. Node* prev = NULL;
B. Node prev = NULL;
C. Node prev* = 0;
D. Node prev = 0;

Solution

  1. Step 1: Understand pointer initialization

    In C++, pointers are declared with * and can be set to NULL or nullptr.
  2. Step 2: Correct pointer declaration

    "Node* prev = NULL;" correctly declares a pointer named prev and initializes it to NULL.
  3. Final Answer:

    Node* prev = NULL; -> Option A
  4. Quick Check:

    Pointer prev initialized to NULL [OK]
Hint: Use * for pointers and assign NULL or nullptr [OK]
Common Mistakes:
  • Declaring pointer without *
  • Assigning NULL to non-pointer variable
  • Using 0 without pointer declaration
3. What will be the output linked list after running the iterative reverse function on the list: 1 -> 2 -> 3 -> null?
medium
A. 3 -> 2 -> 1 -> null
B. 1 -> 2 -> 3 -> null
C. null -> 1 -> 2 -> 3
D. 2 -> 3 -> 1 -> null

Solution

  1. Step 1: Trace reversal of 1 -> 2 -> 3

    Start with prev = NULL, curr = 1. Change 1's next to NULL, move prev to 1, curr to 2.
  2. Step 2: Continue reversing links

    Change 2's next to 1, move prev to 2, curr to 3. Then change 3's next to 2, prev to 3, curr to NULL.
  3. Final Answer:

    3 -> 2 -> 1 -> null -> Option A
  4. Quick Check:

    Reversed list = 3 -> 2 -> 1 [OK]
Hint: Reverse pointers one by one from head to tail [OK]
Common Mistakes:
  • Not updating pointers correctly
  • Leaving last node pointing to old next
  • Confusing original and reversed order
4. Identify the error in this iterative reversal code snippet:
Node* reverse(Node* head) {
  Node* prev = NULL;
  Node* curr = head;
  while (curr != NULL) {
    Node* next = curr->next;
    curr->next = prev;
    prev = curr;
    // Missing update of curr here
  }
  return prev;
}
medium
A. prev is not initialized to NULL
B. The function returns head instead of prev
C. next pointer is not declared
D. The pointer curr is never updated inside the loop, causing an infinite loop

Solution

  1. Step 1: Check loop pointer updates

    Inside the loop, curr must move to next node to avoid infinite loop.
  2. Step 2: Identify missing update

    The code misses 'curr = next;' causing curr to never change and loop forever.
  3. Final Answer:

    The pointer curr is never updated inside the loop, causing an infinite loop -> Option D
  4. Quick Check:

    Missing curr update = infinite loop [OK]
Hint: Always move current pointer forward inside the loop [OK]
Common Mistakes:
  • Forgetting to update curr
  • Returning wrong pointer
  • Not initializing prev
5. Given a singly linked list with nodes containing values [10, 20, 30, 40, 50], which of the following code snippets correctly reverses the list iteratively and returns the new head?
hard
A. Node* reverseList(Node* head) { Node* prev = nullptr; Node* curr = head; while (curr != nullptr) { curr->next = prev; prev = curr; } return prev; }
B. Node* reverseList(Node* head) { Node* curr = head; Node* prev = nullptr; while (prev) { Node* next = curr->next; curr->next = prev; prev = curr; curr = next; } return curr; }
C. Node* reverseList(Node* head) { Node* prev = nullptr; Node* curr = head; while (curr) { Node* next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; }
D. Node* reverseList(Node* head) { Node* prev = nullptr; Node* curr = head; while (curr != nullptr) { Node* next = curr->next; prev = curr; curr = next; } return prev; }

Solution

  1. Step 1: Check pointer initialization and loop condition

    Node* reverseList(Node* head) { Node* prev = nullptr; Node* curr = head; while (curr) { Node* next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; } initializes prev to nullptr, curr to head, and loops while curr is not null.
  2. Step 2: Verify pointer updates inside loop

    Node* reverseList(Node* head) { Node* prev = nullptr; Node* curr = head; while (curr) { Node* next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; } saves next, reverses curr->next, moves prev and curr forward correctly, then returns prev as new head.
  3. Final Answer:

    Node* reverseList(Node* head) { Node* prev = nullptr; Node* curr = head; while (curr) { Node* next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; } -> Option C
  4. Quick Check:

    Correct pointer updates and return [OK]
Hint: Save next, reverse link, move prev and curr forward [OK]
Common Mistakes:
  • Wrong loop condition
  • Not saving next before changing links
  • Returning wrong pointer
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