使用指针
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) { }
};
class MyHash {
private:
vector<ListNode*> lists;
public:
MyHash() : lists(vector<ListNode*>(13, new ListNode(0))) { }
bool find(int x) {
int idx = x % 13;
ListNode* node = lists[idx]->next;
while (node) {
if (node->val == x) return true;
node = node->next;
}
return false;
}
void insert(int x) {
if (find(x)) return;
int idx = x % 13;
ListNode* list = lists[idx];
ListNode* node = new ListNode(x);
node->next = list->next;
list->next = node;
}
};
不使用指针
class MyHash {
private:
vector<vector<vector<int>>> lists;
public:
MyHash() : lists(vector<vector<vector<int>>>(13, {{0, -1}})) { }
bool find(int x) {
int idx = x % 13;
vector<vector<int>> list = lists[idx];
int node = list[0][1];
while (node != -1) {
if (list[node][0] == x) return true;
node = list[node][1];
}
return false;
}
void insert(int x) {
if (find(x)) return;
int idx = x % 13;
vector<vector<int>>& list = lists[idx];
list.push_back({x, list[0][1]});
list[0][1] = list.size() - 1;
}
};