Algorithm
Problem Name: 817. Linked List Components
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.
Code Examples
#1 Code Example with Java Programming
Code -
Java Programming
class Solution {
public int numComponents(ListNode head, int[] G) {
int numOfComponents = 0;
Set < Integer> set = Arrays.stream(G).boxed().collect(Collectors.toSet());
while (head != null && !set.isEmpty()) {
if (set.contains(head.val)) {
while (head != null && !set.isEmpty() && set.contains(head.val)) {
set.remove(head.val);
head = head.next;
}
numOfComponents++;
} else {
head = head.next;
}
}
return numOfComponents;
}
}
Copy The Code &
Try With Live Editor
Input
Output
#2 Code Example with Python Programming
Code -
Python Programming
class Solution:
def numComponents(self, head, G):
"""
:type head: ListNode
:type G: List[int]
:rtype: int
"""
num_connected = 0
set_g = set(G)
while head:
if head.val not in set_g:
head = head.next
continue
while head and head.val in set_g:
head = head.next
num_connected += 1
return num_connected
Copy The Code &
Try With Live Editor
Input
Output