From 4c845dc5e9c72a3faa74fd91330d1cd46f9f3dcc Mon Sep 17 00:00:00 2001 From: varnika-98 Date: Mon, 12 Jan 2026 16:31:18 -0800 Subject: [PATCH 1/4] Completed Exercise 1: Stack implementation --- Exercise_1.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Exercise_1.py b/Exercise_1.py index 532833f5d..905d2d894 100644 --- a/Exercise_1.py +++ b/Exercise_1.py @@ -1,21 +1,29 @@ class myStack: - #Please read sample.java file before starting. - #Kindly include Time and Space complexity at top of each file + #Time Complexity: push: O(1), pop: O(1), peek: O(1), isEmpty: O(1), size: O(1), show: O(n) + #Space Complexity: O(n) + def __init__(self): + self.items = [] def isEmpty(self): + return len(self.items) == 0 def push(self, item): + self.items.append(item) def pop(self): - - + if not self.isEmpty(): + return self.items.pop() + def peek(self): - + if not self.isEmpty(): + return self.items[-1] + def size(self): + return len(self.items) def show(self): - + print(self.items) s = myStack() s.push('1') From ea6e0eeed792f161f882fd36750ebd5b554ed066 Mon Sep 17 00:00:00 2001 From: varnika-98 Date: Mon, 12 Jan 2026 16:33:01 -0800 Subject: [PATCH 2/4] Add .gitignore to exclude macOS files --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..e43b0f988 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store From 2858012fb3881e40561a8cc5061529ed841d32e8 Mon Sep 17 00:00:00 2001 From: varnika-98 Date: Mon, 12 Jan 2026 16:50:36 -0800 Subject: [PATCH 3/4] Completed Exercise 2: Linked list stack --- Exercise_2.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Exercise_2.py b/Exercise_2.py index b11492215..c5b16a634 100644 --- a/Exercise_2.py +++ b/Exercise_2.py @@ -1,15 +1,28 @@ class Node: +#TIME: push: O(1), pop: O(1), __init__ : O(1) +#SPACE: O(n) def __init__(self, data): self.data = data self.next = None class Stack: def __init__(self): + self.top = None def push(self, data): + new_node = Node(data) + new_node.next = self.top + self.top = new_node def pop(self): + if self.isEmpty(): + return None + popped_node = self.top + self.top = self.top.next + return popped_node.data + + a_stack = Stack() while True: From 61dff69000280dc3e73141ca82b5e9514eafaa86 Mon Sep 17 00:00:00 2001 From: varnika-98 Date: Mon, 12 Jan 2026 17:05:15 -0800 Subject: [PATCH 4/4] Completed Exercise 3: Singly linked list --- Exercise_3.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/Exercise_3.py b/Exercise_3.py index a5d466b59..1d0969699 100644 --- a/Exercise_3.py +++ b/Exercise_3.py @@ -1,8 +1,12 @@ class ListNode: + #TIME: append: O(n), find: O(n), remove: O(n) + #SPACE: O(1) """ A node in a singly-linked list. """ def __init__(self, data=None, next=None): + self.data = data + self.next = next class SinglyLinkedList: def __init__(self): @@ -13,12 +17,29 @@ def __init__(self): self.head = None def append(self, data): + new_node = ListNode(data) + # If list is empty + if self.head is None: + self.head = new_node + return + # Traverse to the end of the list + current = self.head + while current.next: + current = current.next + current.next = new_node + """ Insert a new element at the end of the list. Takes O(n) time. """ def find(self, key): + current = self.head + while current: + if current.data == key: + return current + current = current.next + return None """ Search for the first element with `data` matching `key`. Return the element or `None` if not found. @@ -26,7 +47,33 @@ def find(self, key): """ def remove(self, key): + current = self.head + previous = None + + #if head contains the key + if current and current.data == key: + self.head = current.next + return + #search for the key to be deleted + while current and current.data != key: + previous = current + current = current.next + #if key was not present in linked list + if current is None: + return + #unlink the node from linked list + previous.next = current.next """ Remove the first occurrence of `key` in the list. Takes O(n) time. """ + + + +ll = SinglyLinkedList() +ll.append(10) +ll.append(20) +ll.append(30) +print(ll.find(20).data) # 20 +ll.remove(20) +print(ll.find(20)) # None \ No newline at end of file