Linked Lists in Python
  • AI Chat
  • Code
  • Report
  • Spinner

    Initializing a Node

    class Node:
        def __init__(self, data):
            self.data = data  # Assigns the given data to the node
            self.next = None  # Initialize the next attribute to null

    Inserting a New Node at the Beginning of a Linked List

    class LinkedList:
        def __init__(self):
            self.head = None  # Initialize head as None
            
        def insertAtBeginning(self, new_data):
            new_node = Node(new_data)  # Create a new node 
            new_node.next = self.head  # Next for new node becomes the current head
            self.head = new_node  # Head now points to the new node
    
        def printList(self):
            temp = self.head # Start from the head of the list
            while temp:
                print(temp.data,end=' ') # Print the data in the current node
                temp = temp.next # Move to the next node
            print()  # Ensures the output is followed by a new line
    if __name__ == '__main__':
        # Create a new LinkedList instance
        llist = LinkedList()
    
        # Insert each letter at the beginning using the method we created
        llist.insertAtBeginning('fox') 
        llist.insertAtBeginning('brown') 
        llist.insertAtBeginning('quick')  
        llist.insertAtBeginning('the')  
    
        # Now 'the' is the head of the list, followed by 'quick', then 'brown' and 'fox'
    
        # Print the list
        llist.printList()

    Inserting a New Node at the End of a Linked List

    class LinkedList:
        def __init__(self):
            self.head = None  # Initialize head as None
            
        def insertAtBeginning(self, new_data):
            new_node = Node(new_data)  # Create a new node 
            new_node.next = self.head  # Next for new node becomes the current head
            self.head = new_node  # Head now points to the new node
    
        def printList(self):
            temp = self.head # Start from the head of the list
            while temp:
                print(temp.data,end=' ') # Print the data in the current node
                temp = temp.next # Move to the next node
            print()  # Ensures the output is followed by a new line
            
        def insertAtEnd(self, new_data):
            new_node = Node(new_data)  # Create a new node
            if self.head is None:
                self.head = new_node  # If the list is empty, make the new node the head
                return
            last = self.head 
            while last.next:  # Otherwise, traverse the list to find the last node
                last = last.next
            last.next = new_node  # Make the new node the next node of the last node
    if __name__ == '__main__':
        llist = LinkedList()
    
        # Insert words at the beginning
        llist.insertAtBeginning('fox')
        llist.insertAtBeginning('brown')
        llist.insertAtBeginning('quick')
        llist.insertAtBeginning('the')
    
        # Insert a word at the end
        llist.insertAtEnd('jumps')
    
        # Print the list
        llist.printList()

    Deleting a Node from the Beginning of a Linked List

    class LinkedList:
        def __init__(self):
            self.head = None  # Initialize head as None
            
        def insertAtBeginning(self, new_data):
            new_node = Node(new_data)  # Create a new node 
            new_node.next = self.head  # Next for new node becomes the current head
            self.head = new_node  # Head now points to the new node
    
        def printList(self):
            temp = self.head # Start from the head of the list
            while temp:
                print(temp.data,end=' ') # Print the data in the current node
                temp = temp.next # Move to the next node
            print()  # Ensures the output is followed by a new line
            
        def insertAtEnd(self, new_data):
            new_node = Node(new_data)  # Create a new node
            if self.head is None:
                self.head = new_node  # If the list is empty, make the new node the head
                return
            last = self.head 
            while last.next:  # Otherwise, traverse the list to find the last node
                last = last.next
            last.next = new_node  # Make the new node the next node of the last node
            
        def deleteFromBeginning(self):
            if self.head is None:
                return "The list is empty" # If the list is empty, return this string
            self.head = self.head.next  # Otherwise, remove the head by making the next node the new head

    Deleting a Node from the End of a Linked List

    class LinkedList:
        def __init__(self):
            self.head = None  # Initialize head as None
            
        def insertAtBeginning(self, new_data):
            new_node = Node(new_data)  # Create a new node 
            new_node.next = self.head  # Next for new node becomes the current head
            self.head = new_node  # Head now points to the new node
    
        def printList(self):
            temp = self.head # Start from the head of the list
            while temp:
                print(temp.data,end=' ') # Print the data in the current node
                temp = temp.next # Move to the next node
            print()  # Ensures the output is followed by a new line
            
        def insertAtEnd(self, new_data):
            new_node = Node(new_data)  # Create a new node
            if self.head is None:
                self.head = new_node  # If the list is empty, make the new node the head
                return
            last = self.head 
            while last.next:  # Otherwise, traverse the list to find the last node
                last = last.next
            last.next = new_node  # Make the new node the next node of the last node
            
        def deleteFromBeginning(self):
            if self.head is None:
                return "The list is empty" # If the list is empty, return this string
            self.head = self.head.next  # Otherwise, remove the head by making the next node the new head
            
        def deleteFromEnd(self):
            if self.head is None:
                return "The list is empty" 
            if self.head.next is None:
                self.head = None  # If there's only one node, remove the head by making it None
                return
            temp = self.head
            while temp.next.next:  # Otherwise, go to the second-last node
                temp = temp.next
            temp.next = None  # Remove the last node by setting the next pointer of the second-last node to None
    if __name__ == '__main__':
        llist = LinkedList()
    
        # Insert words at the beginning
        llist.insertAtBeginning('fox')
        llist.insertAtBeginning('brown')
        llist.insertAtBeginning('quick')
        llist.insertAtBeginning('the')
    
        # Insert a word at the end
        llist.insertAtEnd('jumps')
    
       # Print the list before deletion
        print("List before deletion:")
        llist.printList()
    
        # Deleting nodes from beginning and end
        llist.deleteFromBeginning()
        llist.deleteFromEnd()
    
        # Print the list after deletion
        print("List after deletion:")
        llist.printList()

    Searching the Linked List for a Specific Value

    class LinkedList:
        def __init__(self):
            self.head = None  # Initialize head as None
            
        def insertAtBeginning(self, new_data):
            new_node = Node(new_data)  # Create a new node 
            new_node.next = self.head  # Next for new node becomes the current head
            self.head = new_node  # Head now points to the new node
    
        def printList(self):
            temp = self.head # Start from the head of the list
            while temp:
                print(temp.data,end=' ') # Print the data in the current node
                temp = temp.next # Move to the next node
            print()  # Ensures the output is followed by a new line
            
        def insertAtEnd(self, new_data):
            new_node = Node(new_data)  # Create a new node
            if self.head is None:
                self.head = new_node  # If the list is empty, make the new node the head
                return
            last = self.head 
            while last.next:  # Otherwise, traverse the list to find the last node
                last = last.next
            last.next = new_node  # Make the new node the next node of the last node
            
        def deleteFromBeginning(self):
            if self.head is None:
                return "The list is empty" # If the list is empty, return this string
            self.head = self.head.next  # Otherwise, remove the head by making the next node the new head
            
        def deleteFromEnd(self):
            if self.head is None:
                return "The list is empty" 
            if self.head.next is None:
                self.head = None  # If there's only one node, remove the head by making it None
                return
            temp = self.head
            while temp.next.next:  # Otherwise, go to the second-last node
                temp = temp.next
            temp.next = None  # Remove the last node by setting the next pointer of the second-last node to None
            
        def search(self, value):
            current = self.head  # Start with the head of the list
            position = 0  # Counter to keep track of the position
            while current: # Traverse the list
                if current.data == value: # Compare the list's data to the search value
                    return f"Value '{value}' found at position {position}" # Print the value if a match is found
                current = current.next
                position += 1
            return f"Value '{value}' not found in the list"