Skip to main content

Move a specific occurrence to end of linked list in python

Python program for Move a specific occurrence to end of linked list. Here problem description and explanation.

#  Python 3 program for
#  Move given occurrence to the end of linked list

#  Linked list node
class LinkNode :
	def __init__(self, data) :
		self.data = data
		self.next = None
	

class SingleLL :
	def __init__(self) :
		self.head = None
	
	#  Add new node at the end of linked list
	def insert(self, value) :
		#  Create a node
		node = LinkNode(value)
		if (self.head == None) :
			self.head = node
		else :
			temp = self.head
			#  Find last node
			while (temp.next != None) :
				#  Visit to next node
				temp = temp.next
			
			#  Add node at last position
			temp.next = node
		
	
	#  Display all Linked List elements
	def display(self) :
		if (self.head != None) :
			temp = self.head
			while (temp != None) :
				#  Display node value
				print("  ", temp.data, end = "")
				#  Visit to next node
				temp = temp.next
			
		else :
			print("Empty Linked list")
		
	
	#  Move all occurrence of given element into the 
	#  end of linked list position
	def moveNodes(self, element) :
		if (self.head == None) :
			print("Empty linked list")
		else :
			#  Some useful auxiliary variables
			temp = self.head
			prev = None
			nodes = None
			current = None
			#  Move a particular occurrence to end of linked list
			while (temp != None) :
				current = temp
				#  Visit to next node
				temp = temp.next
				if (current.data == element) :
					#  Find move element
					if (self.head == current) :
						#  Move the front node element 
						#  to the end position
						self.head = temp
					
					if (prev != None) :
						#  When have a intermediate node
						#  Unlink the move node
						prev.next = temp
					
					current.next = nodes
					nodes = current
				else :
					prev = current
				
			
			if (self.head == None and nodes != None) :
				#  All same nodes are exist in linked list
				self.head = nodes
			elif (prev != None and nodes != None) :
				#  Add occurrence to end
				prev.next = nodes
			else :
				#  When given occurrences element are not found
				print("Occurrences element are not found : ", element)
			
		
	

def main() :
	sll = SingleLL()
	#  Linked list
	#  1 → 2 → 3 → 4 → 4 → 5 → 6 → 7 → NULL
	sll.insert(7)
	sll.insert(1)
	sll.insert(2)
	sll.insert(7)
	sll.insert(3)
	sll.insert(2)
	sll.insert(7)
	occurrence = 7
	print("Before move occurrence ", occurrence ," to end")
	# display all node
	sll.display()
	print("\nAfter move occurrence ", occurrence ," to end")
	sll.moveNodes(occurrence)
	sll.display()

if __name__ == "__main__": main()

Output

Before move occurrence  7  to end
   7   1   2   7   3   2   7
After move occurrence  7  to end
   1   2   3   2   7   7   7




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment