Delete N nodes from end of doubly linked list python
Python program for Delete N nodes from end of doubly linked list. Here problem description and other solutions.
# Python 3 program for
# Delete last N nodes in 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
self.tail = 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
self.tail = node
return
# Add node at last position
self.tail.next = node
node.prev = self.tail
self.tail = node
# Display node element of doubly linked list
def display(self) :
if (self.head == None) :
print("Empty Linked List")
else :
print("\nLinked List Head to Tail ", end = " : ")
# Get first node of linked list
temp = self.head
# iterate linked list
while (temp != None) :
# Display node value
print("", temp.data, end = " ")
# Visit to next node
temp = temp.next
print("\nLinked List Tail to Head ", end = " : ")
# Get last node of linked list
temp = self.tail
# iterate linked list
while (temp != None) :
# Display node value
print("", temp.data, end = " ")
# Visit to prev node
temp = temp.prev
print(end = "\n")
def deleteLastN(self, n) :
if (self.head == None or n <= 0) :
return
counter = 0
temp = self.head
# check n nodes exist or not
while (temp != None and counter < n) :
counter += 1
temp = temp.next
if (counter >= n) :
# Get last node
temp = self.tail
counter = n
while (self.tail != None and counter > 0) :
temp = self.tail
self.tail = temp.prev
temp.next = None
temp.prev = None
if (temp == self.head) :
# remove first node
self.head = None
counter -= 1
if (self.tail != None) :
self.tail.next = None
else :
print("Deleted ", n ," node are missing")
def main() :
dll = DoublyLinkedList()
dll.insert(1)
dll.insert(2)
dll.insert(3)
dll.insert(4)
dll.insert(5)
dll.insert(6)
dll.insert(7)
dll.insert(8)
print("\nBefore delete", end = "")
dll.display()
n = 5
dll.deleteLastN(n)
print("\nAfter delete last ", n ," Nodes")
dll.display()
if __name__ == "__main__": main()
Output
Before delete
Linked List Head to Tail : 1 2 3 4 5 6 7 8
Linked List Tail to Head : 8 7 6 5 4 3 2 1
After delete last 5 Nodes
Linked List Head to Tail : 1 2 3
Linked List Tail to Head : 3 2 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