code: func (s *SkipList) Delete(key interface{}) (value interface{}, ok bool) {
  	if key == nil {
  		panic("goskiplist: nil keys are not supported")
  	}
  	update := make([]*node, s.level()+1, s.effectiveMaxLevel())
  	candidate := s.getPath(s.header, update, key)
  
  	if candidate == nil || candidate.key != key {
  		return nil, false
  	}
  
  	previous := candidate.backward
  	if s.footer == candidate {
  		s.footer = previous
  	}
  
  	next := candidate.next()
  	if next != nil {
  		next.backward = previous
  	}
  
  	for i := 0; i <= s.level() && update[i].forward[i] == candidate; i++ {
  		update[i].forward[i] = candidate.forward[i]
  	}
  
  	for s.level() > 0 && s.header.forward[s.level()] == nil {
  		s.header.forward = s.header.forward[:s.level()]
  	}
  	s.length--
  
  	return candidate.value, true
  }
docs: // Delete removes the node with the given key.
  //
  // It returns the old value and whether the node was present.