Skip to main content

Remove Even nodes from a doubly linked list in python

Python program for Remove Even nodes from a doubly linked list. Here problem description and other solutions.

#  Python 3 program for
#  Delete all the even nodes from a Doubly Linked List 
class LinkNode :
	def __init__(self, data) :
		self.data = data
		self.next = None
		self.prev = None
	

class DoublyLinkedList :
	def __init__(self) :
		self.head = None
	
	#  Insert new node at end position
	def insert(self, value) :
		#  Create a node
		node = LinkNode(value)
		if (self.head == None) :
			#  Add first node
			self.head = node
			return
		
		temp = self.head
		#  Find last node
		while (temp.next != None) :
			#  Visit to next node
			temp = temp.next
		
		#  Add node at the end position
		temp.next = node
		node.prev = temp
	
	#  Display node element of doubly linked list
	def display(self) :
		if (self.head == None) :
			print("Empty Linked List")
		else :
			print("Linked List Head to Tail :")
			#  Get first node of linked list
			temp = self.head
			last = None
			#  iterate linked list 
			while (temp != None) :
				last = temp
				#  Display node value
				print("  ", temp.data, end = "")
				#  Visit to next node
				temp = temp.next
			
			print("\nLinked List Tail to Head :")
			#  Get last node of linked list
			temp = last
			#  iterate linked list 
			while (temp != None) :
				#  Display node value
				print("  ", temp.data, end = "")
				#  Visit to prev node
				temp = temp.prev
			
		
	
	#  Delete all Even element
	def deleteEvenNodes(self) :
		if (self.head == None) :
			# when linked list is empty
			print("Empty linked list", end = "")
		else :
			node = self.head
			hold = None
			while (node != None) :
				#  Check node value is even or not
				if (node.data % 2 == 0) :
					if (node == self.head) :
						#  When delete first node
						self.head = node.next
					
					if (node.next != None) :
						#  When next node present
						node.next.prev = node.prev
					
					if (node.prev != None) :
						#  When previous node present
						node.prev.next = node.next
					
					hold = node
					#  Visit to next node
					node = node.next
					#  Unlink deleted node
					hold.next = None
					hold.prev = None
					hold = None
				else :
					#  Visit to next node
					node = node.next
				
			
		
	

def main() :
	dll = DoublyLinkedList()
	#  Insert following linked list nodes
	dll.insert(8)
	dll.insert(1)
	dll.insert(4)
	dll.insert(9)
	dll.insert(5)
	dll.insert(3)
	dll.insert(12)
	print("Before delete even nodes ")
	# display all node
	dll.display()
	print("\nAfter delete even nodes ")
	dll.deleteEvenNodes()
	dll.display()

if __name__ == "__main__": main()

Output

Before delete even nodes
Linked List Head to Tail :
   8   1   4   9   5   3   12
Linked List Tail to Head :
   12   3   5   9   4   1   8
After delete even nodes
Linked List Head to Tail :
   1   9   5   3
Linked List Tail to Head :
   3   5   9   1




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