📖 Scenario: Imagine you have a chain of boxes connected one after another. Each box holds a number and points to the next box. This is called a linked list. You want to find out how many boxes are in the chain.
🎯 Goal: You will build a simple linked list in Rust and write code to count how many nodes (boxes) it has.
📋 What You'll Learn
Create a linked list with exactly three nodes containing values 10, 20, and 30
Create a variable called length to count nodes
Use a while loop to traverse the linked list using a variable called current
Print the length of the linked list
💡 Why This Matters
🌍 Real World
Linked lists are used in many programs to store data where the size can change. Counting nodes helps understand the size of the data.
💼 Career
Understanding linked lists and how to traverse them is a key skill for software developers, especially in systems programming and interview coding tests.
Progress0 / 4 steps
1
Create a linked list with three nodes
Create a linked list with three nodes containing values 10, 20, and 30. Use a struct called Node with fields value and next. Create a variable called head that points to the first node.
DSA Rust
Hint
Define a struct with value and next. Use Option> for next. Create three nodes linked together.
2
Create a variable to count the length
Inside main, create a variable called length and set it to 0. This will count how many nodes are in the linked list.
DSA Rust
Hint
Use let mut length = 0; to create a counter that can change.
3
Traverse the linked list to count nodes
Use a variable called current and set it to Some(&head). Use a while loop to check if current is Some(node). Inside the loop, increase length by 1 and update current to the next node using node.next.as_deref().
DSA Rust
Hint
Use while let Some(node) = current to loop through nodes. Increase length inside the loop. Move current to the next node with node.next.as_deref().
4
Print the length of the linked list
Use println!("Length of linked list: {}", length); to print the number of nodes in the linked list.
DSA Rust
Hint
Use println!("Length of linked list: {}", length); to show the count.
Practice
(1/5)
1. What does the function to get the length of a linked list typically do?
easy
A. Counts the number of nodes by traversing from head to end
B. Returns the value of the first node
C. Deletes all nodes in the list
D. Finds the maximum value in the list
Solution
Step 1: Understand the linked list traversal
The function starts at the head node and moves through each node one by one.
Step 2: Count each node visited
For every node visited, the function increments a counter until it reaches the end (null).
Final Answer:
Counts the number of nodes by traversing from head to end -> Option A
Quick Check:
Length = number of nodes visited [OK]
Hint: Traverse and count nodes until null [OK]
Common Mistakes:
Returning the value of the first node instead of count
Not handling empty list (null head)
Trying to count without traversal
2. Which Rust code snippet correctly initializes a linked list node with value 5 and next pointer None?
easy
A. let node = Node::new(5);
B. let node = Node(5, None);
C. let node = Node { value: 5, next: None };
D. let node = Node { value: 5 };
Solution
Step 1: Check struct initialization syntax
Rust structs are initialized with field names and values inside braces.
Step 2: Match field names and order
let node = Node { value: 5, next: None }; uses correct field names and syntax. Tuple syntax requires tuple struct definition. Node::new(5) assumes an impl with new method. Omitting next field causes compile error.
Final Answer:
let node = Node { value: 5, next: None }; -> Option C
Quick Check:
Struct init uses field: value pairs [OK]
Hint: Use struct field names with braces for initialization [OK]
Common Mistakes:
Using tuple syntax for struct without tuple struct definition
Missing field names in initialization
Omitting required fields like next
3. What is the output of this Rust code that calculates the length of a linked list?
struct Node {
value: i32,
next: Option,
}
fn length(head: &Option) -> usize {
let mut count = 0;
let mut current = head;
while let Some(node) = current {
count += 1;
current = &node.next;
}
count
}
fn main() {
let node3 = Node { value: 3, next: None };
let node2 = Node { value: 2, next: Some(Box::new(node3)) };
let node1 = Node { value: 1, next: Some(Box::new(node2)) };
let head = Some(Box::new(node1));
println!("{}", length(&head));
}
medium
A. 1
B. 2
C. 0
D. 3
Solution
Step 1: Understand the linked list structure
There are three nodes linked: node1 -> node2 -> node3 -> None.
Step 2: Trace the length function
The function counts nodes by traversing from head. It visits node1, node2, and node3, incrementing count each time.
Final Answer:
3 -> Option D
Quick Check:
3 nodes counted [OK]
Hint: Count nodes by following next pointers until None [OK]
Common Mistakes:
Counting only head node
Not dereferencing Option correctly
Confusing Option with Box
4. Identify the error in this Rust function to get linked list length:
fn length(head: &Option) -> usize {
let mut count = 0;
let mut current = head;
while current.is_some() {
count += 1;
current = current.unwrap().next;
}
count
}
medium
A. Using unwrap() on &Option causes a move error
B. Loop condition should be current.is_none()
C. Count should start at 1, not 0
D. Function should return i32, not usize
Solution
Step 1: Analyze unwrap usage on reference
Calling unwrap() on &Option tries to move out of a borrowed reference, which is not allowed.
Step 2: Correct way to access next node
Use pattern matching or while let Some(node) = current to borrow without moving.
Final Answer:
Using unwrap() on &Option causes a move error -> Option A
Quick Check:
unwrap() moves ownership, not allowed on references [OK]
Hint: Use pattern matching, avoid unwrap on references [OK]
Common Mistakes:
Using unwrap() on borrowed Option causing move error
Wrong loop condition logic
Incorrect return type for length
5. Given a linked list where each node contains an integer, how would you modify the length function to count only nodes with even values?
fn length_even(head: &Option) -> usize {
// Your code here
}
hard
A. Use recursion without checking node values
B. Traverse list, increment count only if node.value % 2 == 0
C. Return length() / 2 assuming half are even
D. Count all nodes, then subtract odd values count
Solution
Step 1: Traverse the linked list nodes
Start from head and move through each node until None.
Step 2: Check each node's value for evenness
Increment count only if node.value % 2 == 0 (even number).
Step 3: Return the count of even-valued nodes
This gives the length of nodes with even values.
Final Answer:
Traverse list, increment count only if node.value % 2 == 0 -> Option B
Quick Check:
Count only even nodes by checking value % 2 == 0 [OK]
Hint: Count nodes while checking even condition [OK]
Common Mistakes:
Counting all nodes without filtering
Assuming half nodes are even without check
Using recursion without base case
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.