Skip to main content
Back to problems
#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)
LeetCode
solution.rs
/*
 * 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
  }
}