Bird
Raised Fist0
DSA Rustprogramming~5 mins

Traversal and Printing a Linked List in DSA Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main purpose of traversing a linked list?
To visit each node in the linked list one by one, usually to read or print the data stored in each node.
Click to reveal answer
beginner
In Rust, how do you typically represent a node in a singly linked list?
A node is usually represented as a struct containing the data and an Option pointing to the next node.
Click to reveal answer
intermediate
Why do we use Option for the next pointer in Rust linked lists?
Because the next node might be absent (None) at the end of the list, and Box allows heap allocation for recursive types.
Click to reveal answer
beginner
What is the stopping condition when traversing a linked list?
When the current node is None, meaning we have reached the end of the list.
Click to reveal answer
beginner
How do you print all elements of a linked list in Rust?
Start from the head node, loop through each node by following the next pointers, and print the data until you reach None.
Click to reveal answer
What does the 'next' field in a linked list node typically represent?
AThe pointer to the previous node
BThe pointer to the next node in the list
CThe data stored in the node
DThe length of the list
In Rust, which type is used to represent a nullable pointer to the next node in a linked list?
ANode
BVec<Node>
CBox<Option<Node>>
DOption<Box<Node>>
What is the first step in traversing a linked list?
AStart from the head node
BStart from the tail node
CCreate a new node
DDelete the head node
When should traversal of a linked list stop?
AAfter visiting the first node
BWhen the list is empty
CWhen the next pointer is None
DAfter visiting the last two nodes
What is printed when traversing and printing a linked list with nodes containing values 1, 2, 3?
A1 -> 2 -> 3 -> null
B3 -> 2 -> 1 -> null
Cnull -> 1 -> 2 -> 3
D1 2 3
Explain how to traverse and print all elements of a singly linked list in Rust.
Think about visiting nodes one by one until you reach the end.
You got /5 concepts.
    Describe the structure of a linked list node in Rust and why Option> is used for the next pointer.
    Consider how Rust handles recursive data and nullable pointers.
    You got /5 concepts.

      Practice

      (1/5)
      1. What does traversing a linked list mean in simple terms?
      easy
      A. Reversing the order of nodes
      B. Adding a new node at the end
      C. Visiting each node one by one from start to end
      D. Deleting the first node

      Solution

      1. Step 1: Understand traversal meaning

        Traversal means going through each element in order, like reading a list from start to finish.
      2. Step 2: Match with linked list action

        Visiting each node one by one from start to end matches the idea of traversal.
      3. Final Answer:

        Visiting each node one by one from start to end -> Option C
      4. Quick Check:

        Traversal = Visit nodes in order [OK]
      Hint: Traversal means visiting nodes one by one [OK]
      Common Mistakes:
      • Confusing traversal with adding or deleting nodes
      • Thinking traversal means changing node order
      2. Which Rust code snippet correctly traverses and prints a singly linked list named list?
      easy
      A. let mut current = &list.head; while let Some(node) = current { println!("{}", node.value); current = &node.next; }
      B. for node in list { println!("{}", node.value); }
      C. while list.head.is_some() { println!("{}", list.head.value); list.head = list.head.next; }
      D. let mut current = list.head; loop { println!("{}", current.value); }

      Solution

      1. Step 1: Check traversal logic

        let mut current = &list.head; while let Some(node) = current { println!("{}", node.value); current = &node.next; } uses a mutable reference to current node and loops while current is Some(node), printing value and moving to next node.
      2. Step 2: Verify other options

        for node in list { println!("{}", node.value); } tries for loop on list directly (not valid without iterator). while list.head.is_some() { println!("{}", list.head.value); list.head = list.head.next; } mutates list head which is unsafe. let mut current = list.head; loop { println!("{}", current.value); } loops infinitely without checking for None.
      3. Final Answer:

        Option A code snippet -> Option A
      4. Quick Check:

        Correct traversal uses while let Some(node) = current [OK]
      Hint: Use while let Some(node) = current for safe traversal [OK]
      Common Mistakes:
      • Trying to loop directly over list without iterator
      • Not checking for None to stop loop
      • Mutating list head during traversal
      3. What will be the output of this Rust code that prints a linked list?
      struct Node {
          value: i32,
          next: Option,
      }
      
      fn print_list(head: &Option) {
          let mut current = head;
          while let Some(node) = current {
              print!("{} -> ", node.value);
              current = &node.next;
          }
          println!("null");
      }
      
      fn main() {
          let list = Some(Box::new(Node { value: 1, next: Some(Box::new(Node { value: 2, next: Some(Box::new(Node { value: 3, next: None })) })) }));
          print_list(&list);
      }
      medium
      A. 3 -> 2 -> 1 -> null
      B. 1 -> 2 -> 3 -> null
      C. 1 2 3 null
      D. null

      Solution

      1. Step 1: Understand list structure

        The list nodes are 1 pointing to 2, which points to 3, which points to None.
      2. Step 2: Trace print_list function

        It prints each node's value followed by ' -> ', then prints 'null' at the end.
      3. Final Answer:

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

        Print nodes in order with arrows [OK]
      Hint: Follow next pointers to print nodes in order [OK]
      Common Mistakes:
      • Printing nodes in reverse order
      • Missing arrows or null at end
      • Printing values without separators
      4. Identify the error in this Rust code that tries to print a linked list and fix it:
      fn print_list(mut head: Option) {
          while let Some(node) = head {
              println!("{}", node.value);
              head = node.next;
          }
      }
      medium
      A. Code uses wrong print macro println! instead of print!
      B. Code does not check for None, causing infinite loop
      C. Code does not update head inside the loop
      D. Code moves ownership of nodes, so it cannot be reused after printing

      Solution

      1. Step 1: Analyze ownership in loop

        The code takes ownership of head and nodes inside the loop, consuming the list and preventing reuse.
      2. Step 2: Suggest fix using references

        Use references (&Option) and iterate without consuming ownership to allow reuse.
      3. Final Answer:

        Code moves ownership of nodes, so it cannot be reused after printing -> Option D
      4. Quick Check:

        Ownership moved inside loop causes consumption [OK]
      Hint: Use references to avoid moving ownership during traversal [OK]
      Common Mistakes:
      • Ignoring ownership rules causing compile errors
      • Not updating head causing infinite loops
      • Confusing print! and println! macros
      5. Given a linked list where each node contains an integer, how would you modify the traversal code to print only even values in order?
      fn print_even(head: &Option) {
          let mut current = head;
          while let Some(node) = current {
              // Your code here
              current = &node.next;
          }
      }
      hard
      A. Add an if check: if node.value % 2 == 0 { println!("{}", node.value); }
      B. Print all values and filter even ones after traversal
      C. Change loop to skip nodes with odd values by modifying next pointer
      D. Use recursion to print only odd values

      Solution

      1. Step 1: Add condition inside traversal

        Check if node.value is even using modulo operator and print only if true.
      2. Step 2: Keep traversal unchanged

        Continue moving current to next node regardless of value to visit all nodes.
      3. Final Answer:

        Add an if check: if node.value % 2 == 0 { println!("{}", node.value); } -> Option A
      4. Quick Check:

        Filter values inside traversal with if condition [OK]
      Hint: Use if condition inside loop to print only even values [OK]
      Common Mistakes:
      • Trying to modify next pointer during traversal
      • Filtering after traversal instead of during
      • Printing odd values instead of even
      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