We are given head, the head node of a linked list containing unique integer values.
We are also given the list G, a subset of the values in the linked list.
Return the number of connected components in G, where two values are connected if they appear consecutively in the linked list.
Example 1:
Input: 
head: 0->1->2->3
G = [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
G = [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.
Note: 
If N is the length of the linked list given by head, 1 <= N <= 10000.
The value of each node in the linked list will be in the range [0, N - 1].
1 <= G.length <= 10000.
G is a subset of all values in the linked list.
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def numComponents(self, head: ListNode, G: List[int]) -> int:
        
        normal_list = []
        while head:
            normal_list.append(head.val)
            head = head.next
            
        print(\"normal_list: \", normal_list)
        
        G.sort()
        print(\"G: \", G)
        
        groups = 0
        stack = []
        group_started = False
        
        # traverse normal_list
        while len(normal_list) > 0:
            a = normal_list.pop(0)
            if a in G:
                group_started = True
            else:
                if group_started == True:
                    groups += 1
                    group_started = False
        
        if group_started == True:
            groups += 1
        
        return groups
            
        
#         i = 0
#         while i < len(normal_list):
#             while i < len(normal_list) and normal_list[i] != G[i]:
#                 G.insert(i, \"\")
#                 i+=1
            
#             i+=1
            
#         print(\"G: \", G)
        
#         groups = 0
        
#         g = 0
#         groups_started = False
#         while g < len(G):
#             if G[g] != '':
#                 groups_started = True
#             else:
#                 if groups_started == True:
#                     groups += 1
#                     groups_started = False
#             g+=1
        
#         if groups_started == True:
#             groups +=1 # for the last one
        
#         print(\"groups: \", groups)
#         return groups
        
        
        
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def numComponents(self, head: ListNode, G: List[int]) -> int:
        
        normal_list = []
        while head:
            normal_list.append(head.val)
            head = head.next
            
        print(\"normal_list: \", normal_list)
        
        G.sort()
        print(\"G: \", G)
        
        groups = 0
        stack = []
        group_started = False
        
        # traverse normal_list
        while len(normal_list) > 0:
            a = normal_list.pop(0)
            if a in G:
                group_started = True
            else:
                if group_started == True:
                    groups += 1
                    group_started = False
        
        if group_started == True:
            groups += 1
        
        return groups
            
        
#         i = 0
#         while i < len(normal_list):
#             while i < len(normal_list) and normal_list[i] != G[i]:
#                 G.insert(i, \"\")
#                 i+=1
            
#             i+=1
            
#         print(\"G: \", G)
        
#         groups = 0
        
#         g = 0
#         groups_started = False
#         while g < len(G):
#             if G[g] != '':
#                 groups_started = True
#             else:
#                 if groups_started == True:
#                     groups += 1
#                     groups_started = False
#             g+=1
        
#         if groups_started == True:
#             groups +=1 # for the last one
        
#         print(\"groups: \", groups)
#         return groups
        
        
        