code: func (list *SkipList) Set(key, value interface{}) *Element {
  	var element *Element
  
  	score := getScore(key, list.reversed)
  	prevs := list.getPrevElementNodes(key, score)
  
  	// found an element with the same key, replace its value
  	if element = prevs[0].next[0]; element != nil && !list.keyFunc.Compare(element.key, key) {
  		element.Value = value
  		return element
  	}
  
  	element = &Element{
  		elementNode: elementNode{
  			next: make([]*Element, list.randLevel()),
  		},
  		key:   key,
  		score: score,
  		Value: value,
  	}
  
  	for i := range element.next {
  		element.next[i] = prevs[i].next[i]
  		prevs[i].next[i] = element
  	}
  
  	list.length++
  	return element
  }
docs: // Sets a value in the list with key.
  // If the key exists, change element value to the new one.
  // Returns new element pointer.