What does 'Traversal Forward' mean in a doubly linked list?
Traversal Forward means moving from the first node (head) to the last node (tail) by following the 'next' pointers.
Click to reveal answer
beginner
What does 'Traversal Backward' mean in a doubly linked list?
Traversal Backward means moving from the last node (tail) to the first node (head) by following the 'prev' pointers.
Click to reveal answer
beginner
Why is traversal backward not possible in a singly linked list?
Because singly linked lists only have 'next' pointers, so you cannot move back to the previous node.
Click to reveal answer
beginner
In C++, how do you start a forward traversal in a doubly linked list?
Start from the head node and move to the next node repeatedly until you reach nullptr.
Click to reveal answer
beginner
In C++, how do you start a backward traversal in a doubly linked list?
Start from the tail node and move to the previous node repeatedly until you reach nullptr.
Click to reveal answer
Which pointer is used to move forward in a doubly linked list?
Aprev
Bnext
Chead
Dtail
✗ Incorrect
The 'next' pointer points to the next node, so it is used to move forward.
Which pointer is used to move backward in a doubly linked list?
Aprev
Btail
Chead
Dnext
✗ Incorrect
The 'prev' pointer points to the previous node, so it is used to move backward.
Can you traverse backward in a singly linked list?
ANo, singly linked list has no prev pointer
BYes, using the prev pointer
CYes, using the next pointer
DOnly if the list is circular
✗ Incorrect
Singly linked lists only have 'next' pointers, so backward traversal is not possible.
Where do you start forward traversal in a doubly linked list?
ATail node
BMiddle node
CHead node
DAny node
✗ Incorrect
Forward traversal starts at the head node and moves forward using 'next'.
Where do you start backward traversal in a doubly linked list?
AAny node
BHead node
CMiddle node
DTail node
✗ Incorrect
Backward traversal starts at the tail node and moves backward using 'prev'.
Explain how to traverse a doubly linked list forward and backward.
Think about which pointers connect nodes in each direction.
You got /6 concepts.
Why is backward traversal not possible in singly linked lists but possible in doubly linked lists?
Focus on the difference in node connections.
You got /4 concepts.
Practice
(1/5)
1. What does forward traversal mean in the context of a singly linked list?
easy
A. Visiting nodes from the head to the tail in order
B. Visiting nodes from the tail to the head in reverse order
C. Skipping every other node while visiting
D. Visiting nodes randomly without order
Solution
Step 1: Understand singly linked list structure
A singly linked list has nodes connected only forward, from head to tail.
Step 2: Define forward traversal
Forward traversal means visiting nodes starting at the head and moving to the tail in order.
Final Answer:
Visiting nodes from the head to the tail in order -> Option A
Quick Check:
Forward traversal = head to tail [OK]
Hint: Forward means start at head and go next nodes [OK]
Common Mistakes:
Confusing forward with backward traversal
Thinking traversal can skip nodes
Assuming random order traversal
2. Which of the following is the correct syntax to traverse a vector forward in C++?
easy
A. for (int i = 0; i < vec.size(); i++) { cout << vec[i] << ' '; }
B. for (int i = vec.size(); i >= 0; i--) { cout << vec[i] << ' '; }
C. for (int i = 1; i <= vec.size(); i++) { cout << vec[i] << ' '; }
D. for (int i = vec.size() - 1; i > 0; i--) { cout << vec[i] << ' '; }
Solution
Step 1: Understand vector indexing in C++
Vectors are zero-indexed, so valid indices are 0 to size()-1.
Step 2: Check loop boundaries
for (int i = 0; i < vec.size(); i++) { cout << vec[i] << ' '; } loops from 0 to size()-1, correctly accessing all elements forward.
Final Answer:
for (int i = 0; i < vec.size(); i++) { cout << vec[i] << ' '; } -> Option A
Quick Check:
Forward vector traversal uses i from 0 to size()-1 [OK]
Hint: Start from 0, go to less than size() for forward loops [OK]
Common Mistakes:
Using i <= vec.size() causing out-of-range error
Starting loop from 1 instead of 0
Looping backwards for forward traversal
3. What is the output of the following C++ code?
std::vector<int> v = {10, 20, 30};
for (int i = v.size() - 1; i >= 0; i--) {
std::cout << v[i] << ' ';
}
medium
A. 10 20 30
B. 30 20 10
C. 30 20
D. Runtime error
Solution
Step 1: Analyze loop start and end
Loop starts at v.size()-1 = 2 and decrements to 0 inclusive.
Step 2: Trace output values
v[2] = 30, v[1] = 20, v[0] = 10 printed in that order with spaces.
Final Answer:
30 20 10 -> Option B
Quick Check:
Backward traversal prints 30 20 10 [OK]
Hint: Backward vector loop starts at size()-1 down to 0 [OK]
Common Mistakes:
Confusing forward and backward order
Off-by-one errors in loop condition
Expecting runtime error due to unsigned index
4. Identify the error in this backward traversal of a vector in C++:
std::vector<int> v = {1, 2, 3};
for (int i = v.size(); i >= 0; i--) {
std::cout << v[i] << ' ';
}
medium
A. Vector cannot be traversed backward
B. Loop condition should be i > 0, not i >= 0
C. Loop starts at v.size(), which is out of range
D. No error, code runs fine
Solution
Step 1: Check loop start index
v.size() is 3, but valid indices are 0 to 2, so v[3] is invalid.
Step 2: Understand consequences
Accessing v[3] causes out-of-range error or undefined behavior.
Final Answer:
Loop starts at v.size(), which is out of range -> Option C
Quick Check:
Index must be less than size() [OK]
Hint: Start backward loop at size()-1, not size() [OK]
Common Mistakes:
Starting loop at size() instead of size()-1
Ignoring vector index bounds
Assuming no error on out-of-range access
5. Given a doubly linked list with nodes 1 <-> 2 <-> 3, which code snippet correctly prints the list backward starting from tail in C++?
struct Node {
int data;
Node* prev;
Node* next;
};
Node* tail = /* points to node with data 3 */;
// Which loop prints backward traversal?
hard
A. for (Node* cur = tail; cur->next != nullptr; cur = cur->next) { std::cout << cur->data << ' '; }
B. for (Node* cur = tail; cur != nullptr; cur = cur->next) { std::cout << cur->data << ' '; }
C. for (Node* cur = tail; cur->prev != nullptr; cur = cur->prev) { std::cout << cur->data << ' '; }
D. for (Node* cur = tail; cur != nullptr; cur = cur->prev) { std::cout << cur->data << ' '; }
Solution
Step 1: Understand doubly linked list backward traversal
Backward traversal moves from tail to head using prev pointers.
Step 2: Check loop correctness
for (Node* cur = tail; cur != nullptr; cur = cur->prev) { std::cout << cur->data << ' '; } starts at tail and moves using cur = cur->prev until nullptr, printing all nodes backward.
Final Answer:
for (Node* cur = tail; cur != nullptr; cur = cur->prev) { std::cout << cur->data << ' '; } -> Option D
Quick Check:
Backward traversal uses prev pointer from tail [OK]
Hint: Backward traversal uses prev pointer from tail to head [OK]
Common Mistakes:
Using next pointer for backward traversal
Stopping loop before head (checking cur->prev != nullptr)
Starting from head instead of tail
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.