705. 设计哈希集合
class MyHashSet {
public:
int size = 30;
struct ListNode
{
int val;
ListNode* next;
ListNode(int val):val(val), next(nullptr){}
};
ListNode** a = (ListNode**)malloc(sizeof(ListNode*)*size);
MyHashSet() {
for(auto i = 0; i < size; ++i) a[i] = nullptr;
}
void add(int key) {
if (a[key % size] == nullptr) a[key % size] = new ListNode(key);
else {
auto p = a[key % size];
auto cur = p;
while (p != nullptr) {
if (p->val == key) return;
cur = p;
p = p->next;
}
cur->next = new ListNode(key);
}
}
void remove(int key) {
if (a[key % size] == nullptr || (a[key % size]->next == nullptr && a[key%size]->val != key)) return;
if (a[key % size]->val == key) a[key % size] = a[key % size]->next;
auto p = a[key % size];
auto cur = p;
while (p != nullptr) {
if (p->val == key) {
cur->next = p->next;
return;
}
cur = p;
p = p->next;
}
}
bool contains(int key) {
if (a[key % size] == nullptr) return false;
auto p = a[key % size];
while (p != nullptr) {
if (p->val == key) return true;
p = p->next;
}
return false;
}
};