Skip to content

Commit b7f8e03

Browse files
author
bt3
committed
warmup, preparing to give interviews
1 parent 8b4aa46 commit b7f8e03

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/usr/bin/env python
2+
3+
__author__ = "bt3"
4+
5+
6+
class HashTable(object):
7+
def __init__(self, slots=10):
8+
self.slots = slots
9+
self.table = []
10+
self.create_table()
11+
12+
# Get the slot
13+
def hash_key(self, value):
14+
return hash(value)%self.slots
15+
16+
# When creating the table, add list struct
17+
# to each slot
18+
def create_table(self):
19+
for i in range(self.slots):
20+
self.table.append([])
21+
22+
# Method to add a item in the right slot
23+
def add_item(self, value):
24+
key = self.hash_key(value)
25+
self.table[key].append(value)
26+
27+
# Aux: print table
28+
def print_table(self):
29+
for key in range(self.slots):
30+
print "Key is {0}, value is {1}.".format(key, self.table[key])
31+
32+
# Aux: find item
33+
def find_item(self, item):
34+
item_hash = self.hash_key(item)
35+
return item in self.table[item_hash]
36+
37+
38+
if __name__ == '__main__':
39+
dic = HashTable(5)
40+
for i in range(1, 40, 2):
41+
dic.add_item(i)
42+
43+
dic.print_table()
44+
assert(dic.find_item(20) == False)
45+
assert(dic.find_item(21) == True)
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/usr/bin/env python
2+
3+
__author__ = "bt3"
4+
5+
6+
class Node(object):
7+
def __init__(self, value, next=None):
8+
self.value = value
9+
self.next = next
10+
11+
12+
class LinkedList(object):
13+
def __init__(self):
14+
self.head = None
15+
16+
def _add(self, value):
17+
self.head = Node(value, self.head)
18+
19+
def _printList(self):
20+
node = self.head
21+
while node:
22+
print node.value
23+
node = node.next
24+
25+
def _find(self, index):
26+
prev = None
27+
node = self.head
28+
i = 0
29+
while node and i < index:
30+
prev = node
31+
node = node.next
32+
i += 1
33+
return node, prev, i
34+
35+
def _delete(self, prev, node):
36+
if not prev:
37+
self.head = node.next
38+
else:
39+
prev.next = node.next
40+
41+
def deleteNode(self, index):
42+
node, prev, i = self._find(index)
43+
if index == i:
44+
self._delete(prev, node)
45+
else:
46+
print('Node with index {} not found'.format(index))
47+
48+
49+
50+
if __name__ == '__main__':
51+
ll = LinkedList()
52+
for i in range(1, 5):
53+
ll._add(i)
54+
55+
print('The list is:')
56+
ll._printList()
57+
58+
print('The list after deleting node with index 2:')
59+
ll.deleteNode(2)
60+
ll._printList()

0 commit comments

Comments
 (0)