diff --git a/short_phone_interview_problems/hash_table.py b/short_phone_interview_problems/hash_table.py new file mode 100644 index 0000000..70ff62d --- /dev/null +++ b/short_phone_interview_problems/hash_table.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +__author__ = "bt3" + + +class HashTable(object): + def __init__(self, slots=10): + self.slots = slots + self.table = [] + self.create_table() + + # Get the slot + def hash_key(self, value): + return hash(value)%self.slots + + # When creating the table, add list struct + # to each slot + def create_table(self): + for i in range(self.slots): + self.table.append([]) + + # Method to add a item in the right slot + def add_item(self, value): + key = self.hash_key(value) + self.table[key].append(value) + + # Aux: print table + def print_table(self): + for key in range(self.slots): + print "Key is {0}, value is {1}.".format(key, self.table[key]) + + # Aux: find item + def find_item(self, item): + item_hash = self.hash_key(item) + return item in self.table[item_hash] + + +if __name__ == '__main__': + dic = HashTable(5) + for i in range(1, 40, 2): + dic.add_item(i) + + dic.print_table() + assert(dic.find_item(20) == False) + assert(dic.find_item(21) == True) \ No newline at end of file diff --git a/short_phone_interview_problems/linked_list.py b/short_phone_interview_problems/linked_list.py new file mode 100644 index 0000000..0abf3e6 --- /dev/null +++ b/short_phone_interview_problems/linked_list.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python + +__author__ = "bt3" + + +class Node(object): + def __init__(self, value, next=None): + self.value = value + self.next = next + + +class LinkedList(object): + def __init__(self): + self.head = None + + def _add(self, value): + self.head = Node(value, self.head) + + def _printList(self): + node = self.head + while node: + print node.value + node = node.next + + def _find(self, index): + prev = None + node = self.head + i = 0 + while node and i < index: + prev = node + node = node.next + i += 1 + return node, prev, i + + def _delete(self, prev, node): + if not prev: + self.head = node.next + else: + prev.next = node.next + + def deleteNode(self, index): + node, prev, i = self._find(index) + if index == i: + self._delete(prev, node) + else: + print('Node with index {} not found'.format(index)) + + + +if __name__ == '__main__': + ll = LinkedList() + for i in range(1, 5): + ll._add(i) + + print('The list is:') + ll._printList() + + print('The list after deleting node with index 2:') + ll.deleteNode(2) + ll._printList() \ No newline at end of file