inputs: "Arrange consonants and vowels nodes in a linked list | A linked list node ; Utility function to print the linked list ; Utility function for checking vowel ; function to arrange consonants and vowels nodes ; for keep track of vowel ; list is empty ; We need to discover the first vowel in the list . It is going to be the returned head , and also the initial latestVowel . ; first element is a vowel . It will also be the new head and the initial latestVowel ; First element is not a vowel . Iterate through the list until we find a vowel . Note that curr points to the element * before * the element with the vowel . ; This is an edge case where there are only consonants in the list . ; Set the initial latestVowel and the new head to the vowel item that we found . Relink the chain of consonants after that vowel item : old_head_consonant . consonant1 . consonant2 . vowel . rest_of_list becomes vowel . old_head_consonant . consonant1 . consonant2 . rest_of_list ; Now traverse the list . Curr is always the item * before * the one we are checking , so that we can use it to re - link . ; The next discovered item is a vowel ; If it comes directly after the previous vowel , we don 't need to  move items around, just mark the  new latestVowel and advance curr. ; But if it comes after an intervening chain of consonants , we need to chain the newly discovered vowel right after the old vowel . Curr is not changed as after the re - linking it will have a new next , that has not been checked yet , and we always keep curr at one before the next to check . ; Chain in new vowel ; Advance latestVowel ; Remove found vowel from previous place ; Re - link chain of consonants after latestVowel ; No vowel in the next element , advance curr . ; Driver code"
How can the above be solved in Python?
targets: class Node :
	def __init__ ( self , x ) :
		self . data = x
		self . next = None
def printlist ( head ) :
	if ( not head ) :
		print ( " Empty ▁ List " )
		return
	while ( head != None ) :
		print ( head . data , end = " ▁ " )
		if ( head . next ) :
			print ( end = " - > ▁ " )
		head = head . next
	print ( )
def isVowel ( x ) :
	return ( x == ' a ' or x == ' e ' or x == ' i ' or x == ' o ' or x == ' u ' or x == ' A ' or x == ' E ' or x == ' I ' or x == ' O ' or x == ' U ' )
def arrange ( head ) :
	newHead = head
	latestVowel = None
	curr = head
	if ( head == None ) :
		return None
	if ( isVowel ( head . data ) ) :
		latestVowel = head
	else :
		while ( curr . next != None and not isVowel ( curr . next . data ) ) :
			curr = curr . next
		if ( curr . next == None ) :
			return head
		latestVowel = newHead = curr . next
		curr . next = curr . next . next
		latestVowel . next = head
	while ( curr != None and curr . next != None ) :
		if ( isVowel ( curr . next . data ) ) :
			if ( curr == latestVowel ) :
				latestVowel = curr = curr . next
			else :
				temp = latestVowel . next
				latestVowel . next = curr . next
				latestVowel = latestVowel . next
				curr . next = curr . next . next
				latestVowel . next = temp
		else :
			curr = curr . next
	return newHead
if __name__ == ' _ _ main _ _ ' :
	head = Node ( ' a ' )
	head . next = Node ( ' b ' )
	head . next . next = Node ( ' c ' )
	head . next . next . next = Node ( ' e ' )
	head . next . next . next . next = Node ( ' d ' )
	head . next . next . next . next . next = Node ( ' o ' )
	head . next . next . next . next . next . next = Node ( ' x ' )
	head . next . next . next . next . next . next . next = Node ( ' i ' )
	print ( " Linked ▁ list ▁ before ▁ : " )
	printlist ( head )
	head = arrange ( head )
	print ( " Linked ▁ list ▁ after ▁ : " )
	printlist ( head )