MCPcopy Create free account
hub / github.com/TheAlgorithms/Python / insert

Method insert

data_structures/linked_list/skip_list.py:189–224  ·  view source on GitHub ↗

:param key: Key to insert. :param value: Value associated with given key. >>> skip_list = SkipList() >>> skip_list.insert(2, "Two") >>> skip_list.find(2) 'Two' >>> list(skip_list) [2]

(self, key: KT, value: VT)

Source from the content-addressed store, hash-verified

187 update_node.forward = update_node.forward[:i]
188
189 def insert(self, key: KT, value: VT):
190 """
191 :param key: Key to insert.
192 :param value: Value associated with given key.
193
194 >>> skip_list = SkipList()
195 >>> skip_list.insert(2, "Two")
196 >>> skip_list.find(2)
197 'Two'
198 >>> list(skip_list)
199 [2]
200 """
201
202 node, update_vector = self._locate_node(key)
203 if node is not None:
204 node.value = value
205 else:
206 level = self.random_level()
207
208 if level > self.level:
209 # After level increase we have to add additional nodes to head.
210 for _ in range(self.level - 1, level):
211 update_vector.append(self.head)
212 self.level = level
213
214 new_node = Node(key, value)
215
216 for i, update_node in enumerate(update_vector[:level]):
217 # Change references to pass through new node.
218 if update_node.level > i:
219 new_node.forward.append(update_node.forward[i])
220
221 if update_node.level < i + 1:
222 update_node.forward.append(new_node)
223 else:
224 update_node.forward[i] = new_node
225
226 def find(self, key: VT) -> VT | None:
227 """

Calls 4

_locate_nodeMethod · 0.95
random_levelMethod · 0.95
NodeClass · 0.70
appendMethod · 0.45