#817
Medium Algorithms Linked list components
Array Hash Table Linked List
57.8% acceptance
Feb 22, 2026
1194
2291
You are given the head of a linked list containing unique integer values and an integer array nums that is a subset of the linked list values.
Return the number of connected components in nums where two values are connected if they appear consecutively in the linked list.
Solution
Rust
Time O(n)
Space O(1)
/*
* You are given the head of a linked list containing unique integer values and an integer array nums that is a subset of the linked list values.
* Return the number of connected components in nums where two values are connected if they appear consecutively in the linked list.
* Example 1:
* Input: head = [0,1,2,3], nums = [0,1,3]
* Output: 2
* Explanation: 0 and 1 are connected, so [0, 1] and [3] are the two connected components.
* Example 2:
* Input: head = [0,1,2,3,4], nums = [0,3,1,4]
* Output: 2
* Explanation: 0 and 1 are connected, 3 and 4 are connected, so [0, 1] and [3, 4] are the two connected components.
* Constraints:
* The number of nodes in the linked list is n.
* 1 <= n <= 104
* 0 <= Node.val < n
* All the values Node.val are unique.
* 1 <= nums.length <= n
* 0 <= nums[i] < n
* All the values of nums are unique.
*/
impl Solution {
pub fn num_components(head: Option<Box<ListNode>>, nums: Vec<i32>) -> i32 {
use std::collections::HashSet;
let set: HashSet<i32> = nums.into_iter().collect();
let mut count = 0;
let mut prev_in = false;
let mut cur = &head;
while let Some(node) = cur {
if set.contains(&node.val) {
if !prev_in { count += 1; }
prev_in = true;
} else {
prev_in = false;
}
cur = &node.next;
}
count
}
}