# program to delete kth element from the end of Linked List
class LinkedList:
def __init__(self):
self.head = None
# method adds elements to the left of the Linked List
def addToStart(self, data):
# create a temporary node
tempNode = Node(data)
tempNode.setLink(self.head)
self.head = tempNode
del tempNode
# method adds elements to the right of the Linked List
def addToEnd(self, data):
start = self.head
tempNode = Node(data)
while start.getNextNode():
start = start.getNextNode()
start.setLink(tempNode)
del tempNode
return True
# method displays Linked List
def display(self):
start = self.head
if start is None:
print("Empty List!!!")
return False
while start:
print(str(start.getData()), end=" ")
start = start.link
if start:
print("-->", end=" ")
print()
# deleting node with only that node pointer
def deleteNode(self, nodePtr):
if nodePtr is None:
return
else:
# make a pointer to next node
nextNode = nodePtr.getNextNode()
# copy deteils of next node to current node
nodePtr.updateData(nextNode.getData())
nodePtr.setLink(nextNode.getNextNode())
# set nextNode to None
nextNode = None
# deleting kth element from the end
def delete_kth_Element_End(self, k):
first = self.head
second = self.head
# moving second to the kth node from the start
for i in range(k):
second = second.getNextNode()
# moving second to end of the linked list
while second is not None:
first = first.getNextNode()
second = second.getNextNode()
# delete first as it now points to the kth node from the end
self.deleteNode(first)
return
# node class
class Node:
# default value of data and link is none if no data is passed
def __init__(self, data=None, link=None):
self.data = data
self.link = link
# method to update the data feild of Node
def updateData(self, data):
self.data = data
# method to set Link feild the Node
def setLink(self, node):
self.link = node
# method returns data feild of the Node
def getData(self):
return self.data
# method returns address of the next Node
def getNextNode(self):
return self.link
# main method
# creating LinkedList
myList = LinkedList()
myList.addToStart(1)
myList.addToEnd(2)
myList.addToEnd(3)
myList.addToEnd(4)
myList.addToEnd(5)
myList.addToEnd(6)
myList.addToEnd(7)
myList.addToEnd(8)
myList.addToEnd(9)
myList.addToEnd(10)
myList.addToEnd(11)
myList.display()
print("Deleting 5th element from the end of the linked list")
myList.delete_kth_Element_End(5)
myList.display()