'Delete last node in linked list

I am implementing deletion of last node in linked list using Python. Below is my code:

class Node:
    def __init__(self, key):
        self.key = key
        self.next = None
        
def printList(head):
    curr = head
    while curr != None:
        print(curr.key, end=" ")
        curr = curr.next
    
def deleteLastNode(head):
    if head == None:
        return None
    
    temp = head
    
    # Iterating till the last Node
    while temp.next != None:
        temp = temp.next
    temp = None
    return head

# Driver code
head = Node(10)
head.next = Node(20)
head.next.next = Node(30)

head = deleteLastNode(head)
printList(head)

However, in output I'm still getting the complete linked list.

10 20 30

How is it printing 30 when the last node is already set to temp = None?



Solution 1:[1]

#Another way of solving 
class Node:
    def __init__(self, key):
        self.key = key
        self.next = None
    
def printList(head):
    curr = head
    while curr != None:
        print(curr.key, end=" ")
        curr = curr.next

def deleteLastNode(head):
    if head == None:
        return None

    temp = head
    prev=None    #creating the value of previous element
    # Iterating till the last Node
    while temp.next != None:
        prev=temp  #updating for every iteration
        temp = temp.next
    prev.next = None #returning as NONE value
    return head

# Driver code
head = Node(10)
head.next = Node(20)
head.next.next = Node(30)

head = deleteLastNode(head)
printList(head)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Yogesh T