From 3ae086fb58684fad3bb865be5c5a398fe0d4cc62 Mon Sep 17 00:00:00 2001 From: Donald Calloway Date: Tue, 7 Oct 2025 17:56:39 -0700 Subject: [PATCH] Added linked and doublely-linked list Python code --- linked_list.py | 127 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 112 insertions(+), 15 deletions(-) diff --git a/linked_list.py b/linked_list.py index 6a35ece..d3e63c3 100644 --- a/linked_list.py +++ b/linked_list.py @@ -1,15 +1,99 @@ class Node: - def __init__(self, data): - self.data = data + def __init__(self, index, x:int, y:int): + self.index = index + self.data = (x, y) self.prev = None self.next = None + +class LinkedList: + def __init__(self, x:int, y: int): + self.data = (x, y) + self.head = None + + def append(self, x:int, y:int): + new_node = Node(None, x, y) + if not self.head: + self.head = new_node + return + current = self.head + while current.next: + current = current.next + current.next = new_node + + def insert(self, index, x: int, y:int): + new_node = Node(index, x, y) + if not self.head or index == 0: + new_node.next = self.head + if self.head: + self.head.prev = new_node + self.head = new_node + return + current = self.head + prev = None + curr_index = 0 + while current and curr_index < index: + prev = current + current = current.next + curr_index += 1 + new_node.next = current + if current: + current.prev = new_node + prev.next = new_node + new_node.prev = prev + + + def delete(self, index: int): + if not self.head: + print("List is empty.") + return + current = self.head + curr_index = 0 + + # Deleting the head node + if index == 0: + self.head = current.next + if self.head: + self.head.prev = None + return + + # Traverse to the node at the given index + while current and curr_index < index: + current = current.next + curr_index += 1 + + if not current: + print("Index out of bounds.") + return + + # Re-link the previous and next nodes + if current.prev: + current.prev.next = current.next + if current.next: + current.next.prev = current.prev + + def to_list(self): + result = [] + current = self.head + while current: + result.append(current.data) + current = current.next + return result + + def display_forward(self): + current = self.head + while current: + print(current.data, end=" -> ") + current = current.next + print("None") + + class DoublyLinkedList: def __init__(self): self.head = None - def append(self, data): - new_node = Node(data) + def append(self, x, y): + new_node = Node(None, x, y) if not self.head: self.head = new_node return @@ -19,8 +103,8 @@ class DoublyLinkedList: current.next = new_node new_node.prev = current - def insert(self, index, data): - new_node = Node(data) + def insert(self, index, x, y): + new_node = Node(None, x, y) if index == 0: new_node.next = self.head if self.head: @@ -40,10 +124,10 @@ class DoublyLinkedList: current.next.prev = new_node current.next = new_node - def delete(self, data): + def delete(self, x, y): current = self.head while current: - if current.data == data: + if current.data == (x, y): if current.prev: current.prev.next = current.next else: @@ -52,7 +136,7 @@ class DoublyLinkedList: current.next.prev = current.prev return current = current.next - raise ValueError(f"{data} not found in list") + raise ValueError(f"{(x, y)} not found in list") def reverse(self): current = self.head @@ -102,15 +186,28 @@ class DoublyLinkedList: current = current.prev print("None") + +ll = LinkedList(0, 0) +ll.append(0, 10) +ll.append(10, 20) +ll.append(20, 30) +ll.append(30, 40) +ll.insert(1, 11, 15) +ll.insert(2, 16, 20) +ll.delete(1) +ll.display_forward() + + + dll = DoublyLinkedList() -dll.append(10) -dll.append(20) -dll.append(30) -dll.insert(1, 15) # Insert 15 at index 1 -dll.delete(20) # Remove node with value 20 +dll.append(10, 6) +dll.append(20, 5) +dll.append(30, 3) +dll.insert(1, 15, 10) # Insert 15 at index 1 +dll.delete(20, 5) # Remove node with value 20 dll.reverse() # Reverse the list print("Index of 15:", dll.find(15)) -dll.append(50) +dll.append(50, 8) print(dll.to_list()) # Output: [30, 15, 10, 50]