5. Hash TableΒΆ

class ListNode:
    def __init__(self, key, value):
        self.key = key
        self.value = value
        self.next = None

class MyHashMap:
    def __init__(self):
        self.size = 1000
        self.hash_table = [None] * self.size

    def put(self, key, value):
        index = key % self.size
        if self.hash_table[index] is None:
            self.hash_table[index] = ListNode(key, value)
        else:
            curr_node = self.hash_table[index]
            while True:
                if curr_node.key == key:
                    curr_node.value = value
                    print("null")
                    return
                if curr_node.next is None:
                    break
                curr_node = curr_node.next
            curr_node.next = ListNode(key, value)

    def get(self, key):
        index = key % self.size
        curr_node = self.hash_table[index]
        while curr_node:
            if curr_node.key == key:
                print(curr_node.value)
                return curr_node.value
            else:
                curr_node = curr_node.next
        print(-1)
        return -1

    def remove(self, key):
        index = key % self.size
        curr_node = prev_node = self.hash_table[index]

        if not curr_node:
            print("null")
            return

        if curr_node.key == key:
            self.hash_table[index] = curr_node.next
        else:
            curr_node = curr_node.next

            while curr_node:
                if curr_node.key == key:
                    prev_node.next = curr_node.next
                    break
                else:
                    prev_node, curr_node = prev_node.next, curr_node.next

obj = MyHashMap()
obj.put(1, 2)
obj.put(2, 2)
obj.get(1)
obj.get(3)
obj.put(2, 1)
obj.get(2)
obj.remove(2)
obj.get(2)