code: func (s *SkipList) getPath(current *node, update []*node, key interface{}) *node {
  	depth := len(current.forward) - 1
  
  	for i := depth; i >= 0; i-- {
  		for current.forward[i] != nil && s.lessThan(current.forward[i].key, key) {
  			current = current.forward[i]
  		}
  		if update != nil {
  			update[i] = current
  		}
  	}
  	return current.next()
  }
docs: // getPath populates update with nodes that constitute the path to the
  // node that may contain key. The candidate node will be returned. If
  // update is nil, it will be left alone (the candidate node will still
  // be returned). If update is not nil, but it doesn't have enough
  // slots for all the nodes in the path, getPath will panic.