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

x
+
cmd
head = [0,1,2,3], nums = [0,1,3]

Output

x
+
cmd
2

#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

x
+
cmd
head = [0,1,2,3], nums = [0,1,3]

Output

x
+
cmd
2
Advertisements

Demonstration


Previous
#816 Leetcode Ambiguous Coordinates Solution in C, C++, Java, JavaScript, Python, C# Leetcode
Next
#818 Leetcode Race Car Solution in C, C++, Java, JavaScript, Python, C# Leetcode