: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)
| 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 | """ |