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
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