diff --git a/Exercise_1.py b/Exercise_1.py index 532833f5d..11dfb5f65 100644 --- a/Exercise_1.py +++ b/Exercise_1.py @@ -1,20 +1,34 @@ class myStack: #Please read sample.java file before starting. #Kindly include Time and Space complexity at top of each file - def __init__(self): - - def isEmpty(self): - - def push(self, item): - - def pop(self): - - - def peek(self): - - def size(self): - - def show(self): + def __init__(self): + self.stack = [] + + def isEmpty(self): + if len(self.stack) > 0: + return False + return True + + def push(self, item): + self.stack.append(item) + + def pop(self): + if len(self.stack) == 0: + return 'Sorry we dont have any value in stack' + popped_val = self.stack[-1] + self.stack = self.stack[:-1] + return popped_val + + def peek(self): + if len(self.stack) == 0: + return 'Sorry we dont have any value in stack' + return self.stack[-1] + + def size(self): + return len(self.stack) + + def show(self): + return self.stack s = myStack() diff --git a/Exercise_2.py b/Exercise_2.py index b11492215..865f6c809 100644 --- a/Exercise_2.py +++ b/Exercise_2.py @@ -6,10 +6,39 @@ def __init__(self, data): class Stack: def __init__(self): + self.node = None def push(self, data): + if self.node: + flag = True + last_node = self.node + while(flag): + if not last_node.next: + last_node.next = Node(data) + flag = False + else: + last_node = last_node.next + else: + self.node = Node(data) + print('Data is added %s'%data) def pop(self): + popped_val = None + if self.node: + flag = True + last_node = self.node + while(flag): + if not last_node.next: + popped_val = last_node.data + self.node = None + flag = False + elif not last_node.next.next: + popped_val = last_node.next.data + last_node.next = None + flag = False + else: + last_node = last_node.next + return popped_val a_stack = Stack() while True: diff --git a/Exercise_3.py b/Exercise_3.py index a5d466b59..1014bb488 100644 --- a/Exercise_3.py +++ b/Exercise_3.py @@ -3,6 +3,8 @@ class ListNode: A node in a singly-linked list. """ def __init__(self, data=None, next=None): + self.data = data + self.next = None class SinglyLinkedList: def __init__(self): @@ -10,13 +12,29 @@ def __init__(self): Create a new singly-linked list. Takes O(1) time. """ - self.head = None + self.head = ListNode(None) + + def print_val(self): + """ + Helper function to debug + """ + last_node = self.head + while(last_node): + print(last_node.data) + last_node = last_node.next def append(self, data): """ Insert a new element at the end of the list. Takes O(n) time. """ + if not self.head.data: + self.head.data = data + return + last_node = self.head + while(last_node.next): + last_node = last_node.next + last_node.next = ListNode(data) def find(self, key): """ @@ -24,9 +42,27 @@ def find(self, key): `key`. Return the element or `None` if not found. Takes O(n) time. """ - + if not self.head: + return False + last_node = self.head + while(last_node): + if last_node.data == key: + return True + last_node = last_node.next + return False + def remove(self, key): """ Remove the first occurrence of `key` in the list. Takes O(n) time. """ + last_node = self.head + if last_node.data == key: + self.head = last_node.next + return True + while(last_node.next): + if last_node.next.data == key: + last_node.next = last_node.next.next + return True + last_node = last_node.next + return False