File tree Expand file tree Collapse file tree 1 file changed +30
-0
lines changed
Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -51,6 +51,23 @@ def get(self, key):
5151 # table is full and wrapped around
5252 return None
5353
54+ def del_ (self , key ):
55+ initial_hash = hash_ = self .hash (key )
56+ while True :
57+ if self ._keys [hash_ ] is self ._empty :
58+ # That key was never assigned
59+ return None
60+ elif self ._keys [hash_ ] == key :
61+ # key found, assign with deleted sentinel
62+ self ._keys [hash_ ] = self ._deleted
63+ self ._values [hash_ ] = self ._deleted
64+ return
65+
66+ hash_ = self .rehash (hash_ )
67+ if initial_hash == hash_ :
68+ # table is full and wrapped around
69+ return None
70+
5471 def hash (self , key ):
5572 return key % self .size
5673
@@ -96,3 +113,16 @@ def test_get_on_full_table_does_halts(self):
96113 for i in range (10 , 20 ):
97114 m .put (i , i )
98115 self .assertEqual (None , m .get (1 ))
116+
117+ def test_delete_key (self ):
118+ m = HashTable (10 )
119+ m .put (1 , 1 )
120+ m .del_ (1 )
121+ self .assertEqual (None , m .get (1 ))
122+
123+ def test_delete_key_and_reassign (self ):
124+ m = HashTable (10 )
125+ m .put (1 , 1 )
126+ m .del_ (1 )
127+ m .put (1 , 2 )
128+ self .assertEqual (2 , m .get (1 ))
You can’t perform that action at this time.
0 commit comments