func (l *List) Remove(key string) {
	if l.size == 0 {
		return
	}
	var cur, prev *Node
	for cur, prev = l.head, nil; cur != nil; cur, prev = cur.next, cur {
		if cur.key == key {
			if cur == l.head {
				l.head = l.head.next
			} else {
				prev.next = cur.next
			}
			l.size--
			return
		}
	}
}
Remove removes a value based on its key from the list
package hash
type Node struct {
	key  string
	val  interface{}
	next *Node
}
type List struct {
	head, tail *Node
	size       int
}
func NewList() *List {
	return &List{size: 0}
}
func (l *List) GetHead() *Node {
	return l.head
}
func (l *List) GetTail() *Node {
	return l.tail
}
func (n *Node) Next() *Node {
	if n == nil {
		return nil
	}
	return n.next
}
func (n *Node) GetKey() string {
	return n.key
}
func (n *Node) GetVal() interface{} {
	return n.val
}
func (l *List) Append(key string, val interface{}) {
	newNode := &Node{key: key, val: val}
	if l.size == 0 {
		l.head = newNode
		l.tail = newNode
	} else {
		l.tail.next = newNode
		l.tail = newNode
	}
	l.size++
}