Bird
Raised Fist0
DSA Cprogramming~10 mins

Traversal Forward and Backward in DSA C - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to move the pointer forward in a singly linked list.

DSA C
current = current[1];
Drag options to blanks, or click blank then click option'
A->next
B->prev
C.next
D.prev
Attempts:
3 left
💡 Hint
Common Mistakes
Using '.next' instead of '->next' in pointer access.
Using 'prev' pointer which does not exist in singly linked list.
2fill in blank
medium

Complete the code to move the pointer backward in a doubly linked list.

DSA C
current = current[1];
Drag options to blanks, or click blank then click option'
A->prev
B->next
C.prev
D.next
Attempts:
3 left
💡 Hint
Common Mistakes
Using '.prev' instead of '->prev' in pointer access.
Using 'next' pointer to move backward.
3fill in blank
hard

Fix the error in the traversal code to move forward in a singly linked list.

DSA C
while (current != NULL) {
    printf("%d -> ", current->data);
    current = current[1];
}
printf("NULL\n");
Drag options to blanks, or click blank then click option'
A->prev
B->next
C.next
D.prev
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'prev' pointer which does not exist in singly linked list.
Using '.' operator instead of '->' for pointer access.
4fill in blank
hard

Fill both blanks to traverse backward and print data in a doubly linked list.

DSA C
while (current != NULL) {
    printf("%d -> ", current->data);
    current = current[1];
}
printf("NULL\n");

// To move backward:
current = tail;
while (current != NULL) {
    printf("%d -> ", current->data);
    current = current[2];
}
printf("NULL\n");
Drag options to blanks, or click blank then click option'
A->next
B->prev
C.prev
D.next
Attempts:
3 left
💡 Hint
Common Mistakes
Using '.' operator instead of '->'.
Mixing up next and prev pointers.
5fill in blank
hard

Fill all three blanks to create a function that prints a doubly linked list forward and backward.

DSA C
void printList(struct Node* head, struct Node* tail) {
    struct Node* current = head;
    while (current != NULL) {
        printf("%d -> ", current[1]);
        current = current[2];
    }
    printf("NULL\n");

    current = tail;
    while (current != NULL) {
        printf("%d -> ", current[3]);
        current = current->prev;
    }
    printf("NULL\n");
}
Drag options to blanks, or click blank then click option'
A->data
B->next
D->prev
Attempts:
3 left
💡 Hint
Common Mistakes
Using '.' instead of '->' for pointer access.
Using wrong pointer to move forward or backward.

Practice

(1/5)
1. What does forward traversal in a linked list mean?
easy
A. Visiting nodes from the first node to the last node
B. Visiting nodes from the last node to the first node
C. Skipping every alternate node while visiting
D. Visiting nodes randomly

Solution

  1. Step 1: Understand forward traversal

    Forward traversal means starting at the first node and moving to the next node repeatedly until the end.
  2. Step 2: Compare with options

    Only Visiting nodes from the first node to the last node describes visiting nodes from first to last, which matches forward traversal.
  3. Final Answer:

    Visiting nodes from the first node to the last node -> Option A
  4. Quick Check:

    Forward traversal = first to last [OK]
Hint: Forward means start to end in order [OK]
Common Mistakes:
  • Confusing forward with backward traversal
  • Thinking traversal is random
  • Assuming skipping nodes is traversal
2. Which of the following is the correct syntax to traverse a singly linked list forward in C?
easy
A. for(Node* curr = head; curr != NULL; curr = curr->prev) { /* process curr */ }
B. for(Node* curr = head; curr != NULL; curr = curr->next) { /* process curr */ }
C. while(head != NULL) { head = head->prev; }
D. for(Node* curr = tail; curr != NULL; curr = curr->prev) { /* process curr */ }

Solution

  1. Step 1: Identify forward traversal syntax

    Forward traversal in singly linked list uses next pointer starting from head.
  2. Step 2: Check options for correct pointer usage

    for(Node* curr = head; curr != NULL; curr = curr->next) { /* process curr */ } uses curr = curr->next starting from head, which is correct.
  3. Final Answer:

    for(Node* curr = head; curr != NULL; curr = curr->next) { /* process curr */ } -> Option B
  4. Quick Check:

    Use next pointer from head for forward traversal [OK]
Hint: Use next pointer from head for forward traversal [OK]
Common Mistakes:
  • Using prev pointer in singly linked list
  • Starting from tail in singly linked list
  • Using incorrect loop conditions
3. What will be the output of the following code snippet that traverses a doubly linked list backward?
typedef struct Node {
  int data;
  struct Node* next;
  struct Node* prev;
} Node;

void printBackward(Node* tail) {
  Node* curr = tail;
  while(curr != NULL) {
    printf("%d ", curr->data);
    curr = curr->prev;
  }
}

// List: 1 <-> 2 <-> 3, tail points to node with data 3
printBackward(tail);
medium
A. 1 2 3
B. 3 1 2
C. 3 2 1
D. 2 3 1

Solution

  1. Step 1: Understand backward traversal in doubly linked list

    Starting from tail (3), moving prev pointer visits nodes 3, 2, then 1.
  2. Step 2: Trace the output

    Prints 3, then 2, then 1 with spaces.
  3. Final Answer:

    3 2 1 -> Option C
  4. Quick Check:

    Backward traversal prints tail to head [OK]
Hint: Backward traversal prints from tail to head [OK]
Common Mistakes:
  • Confusing order of printing
  • Using next pointer instead of prev
  • Starting from head instead of tail
4. Identify the error in the following code that attempts to traverse a doubly linked list backward:
void traverseBackward(Node* tail) {
  Node* curr = tail;
  while(curr->next != NULL) {
    printf("%d ", curr->data);
    curr = curr->prev;
  }
}
medium
A. The printf statement is missing a newline character
B. The pointer curr should start from head, not tail
C. The code should use curr = curr->next instead of curr = curr->prev
D. The loop condition should check curr != NULL, not curr->next != NULL

Solution

  1. Step 1: Analyze loop condition for backward traversal

    Backward traversal moves using prev pointer until curr becomes NULL.
  2. Step 2: Identify incorrect condition

    Checking curr->next != NULL is wrong; it should be curr != NULL to avoid null pointer access.
  3. Final Answer:

    The loop condition should check curr != NULL, not curr->next != NULL -> Option D
  4. Quick Check:

    Loop until curr is NULL in backward traversal [OK]
Hint: Check curr != NULL in loops, not curr->next for backward traversal [OK]
Common Mistakes:
  • Using next pointer condition in backward traversal
  • Starting from head instead of tail
  • Ignoring null pointer checks
5. Given a doubly linked list with nodes containing integers, write a function to print the list forward and then backward without using extra space. Which approach correctly achieves this?
hard
A. Traverse from head to tail printing data, then traverse from tail to head printing data
B. Traverse from head to tail printing data twice
C. Traverse from tail to head printing data, then traverse from head to tail printing data
D. Traverse from head to tail printing data, then reverse the list and print forward again

Solution

  1. Step 1: Understand traversal without extra space

    Use existing next and prev pointers to traverse forward and backward.
  2. Step 2: Identify correct approach

    Traverse from head to tail printing data, then traverse from tail to head printing data correctly traverses forward from head to tail, then backward from tail to head printing data without modifying list.
  3. Final Answer:

    Traverse from head to tail printing data, then traverse from tail to head printing data -> Option A
  4. Quick Check:

    Use head and tail pointers for forward and backward traversal [OK]
Hint: Print forward from head, backward from tail without changing list [OK]
Common Mistakes:
  • Reversing list unnecessarily
  • Printing forward twice
  • Using extra space like arrays or stacks
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