Python - Double Linked List

This program includes methods for inserting at the beginning and end, and deleting a specific node by its value. 



# ----------------------------------------

# Node Class

# ----------------------------------------

class Node:

def __init__(self, data):

self.data = data

self.next = None

self.prev = None


# ----------------------------------------

# Doubly Linked List Class

# ----------------------------------------

class DoublyLinkedList:

def __init__(self):

self.head = None


# Insert at the beginning

def insert_at_beginning(self, data):

new_node = Node(data)

new_node.next = self.head

if self.head:

self.head.prev = new_node

self.head = new_node


# Insert at the end

def insert_at_end(self, data):


 


new_node = Node(data)

if self.head is None:

self.head = new_node

return


temp = self.head

while temp.next:

temp = temp.next


temp.next = new_node

new_node.prev = temp


# Delete a node by value

def delete(self, key):

temp = self.head


# If head is to be deleted

if temp and temp.data == key:

self.head = temp.next

if self.head:

self.head.prev = None

temp = None

return


while temp and temp.data != key:

temp = temp.next


if temp is None:

print(f"Value {key} not found in the list.")

return



if temp.next:

temp.next.prev = temp.prev

if temp.prev:

temp.prev.next = temp.next

temp = None


# Search for a value

def search(self, key):

temp = self.head

while temp:

if temp.data == key:

return True

temp = temp.next

return False


# Display forward

def display_forward(self):

temp = self.head

print("Forward:", end=" ")

while temp:

print(temp.data, end=" <-> ")

temp = temp.next

print("None")


# Display backward

def display_backward(self):

temp = self.head

if not temp:

print("List is empty.")

return



# Go to last node

while temp.next:

temp = temp.next


print("Backward:", end=" ")

while temp:

print(temp.data, end=" <-> ")

temp = temp.prev

print("None")


# ----------------------------------------

# Testing Doubly Linked List

# ----------------------------------------

if __name__ == "__main__":

dll = DoublyLinkedList()


dll.insert_at_beginning(10)

dll.insert_at_beginning(20)

dll.insert_at_end(30)

dll.insert_at_end(40)


dll.display_forward()

dll.display_backward()


print("\nSearching for 30:", dll.search(30))

print("Searching for 100:", dll.search(100))


print("\nDeleting 20...")

dll.delete(20)

dll.display_forward()




print("\nDeleting 100...")

dll.delete(100)








Comments