leetcode地址
package main
import (
"fmt"
)
const (
size = 10
)
type MyHashMap struct {
arr []*MyLinkedList
}
type MyLinkedList struct {
k, v int
next *MyLinkedList
}
/** Initialize your data structure here. */
func Constructor() MyHashMap {
return MyHashMap{
arr: make([]*MyLinkedList, size),
}
}
/** value will always be non-negative. */
func (this *MyHashMap) Put(key int, value int) {
this.Remove(key)
cll := this.arr[key%size]
nll := &MyLinkedList{
k: key,
v: value,
}
if cll != nil {
nll.next = cll
}
this.arr[key%size] = nll
}
/** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */
func (this *MyHashMap) Get(key int) int {
cll := this.arr[key%size]
for cll != nil {
if cll.k == key {
return cll.v
}
cll = cll.next
}
return -1
}
/** Removes the mapping of the specified value key if this map contains a mapping for the key */
func (this *MyHashMap) Remove(key int) {
cll := this.arr[key%size]
var pre *MyLinkedList
for cll != nil {
if cll.k == key {
if pre == nil && cll.next == nil {
this.arr[key%size] = nil
} else if pre == nil && cll.next != nil {
this.arr[key%size] = cll.next
} else if pre != nil && cll.next == nil {
pre.next = nil
} else if pre != nil && cll.next != nil {
pre.next = cll.next
}
break
}
pre = cll
cll = cll.next
}
}
/**
* Your MyHashMap object will be instantiated and called as such:
* obj := Constructor();
* obj.Put(key,value);
* param_2 := obj.Get(key);
* obj.Remove(key);
*/
func main() {
obj := Constructor()
obj.Put(1, 2)
obj.Put(2, 4)
obj.Put(11, 6)
obj.Put(4, 8)
param_2 := obj.Get(1)
fmt.Println(param_2)
obj.Remove(1)
param_2 = obj.Get(1)
fmt.Println(param_2)
fmt.Println(obj)
fmt.Println(obj)
}
网友评论