class IntervalSkipList

def delete(marker)

def delete(marker)
  range = ranges[marker]
  path_to_first_node = make_path
  first_node = find(range.first, path_to_first_node)
  cur_node = first_node
  cur_level = first_node.top_level
  while next_node_at_level_inside_range?(cur_node, cur_level, range)
    while can_ascend_from?(cur_node, cur_level) && next_node_at_level_inside_range?(cur_node, cur_level + 1, range)
      cur_level += 1
    end
    cur_node = unmark_forward_path_at_level(cur_node, cur_level, marker)
  end
  while node_inside_range?(cur_node, range)
    while can_descend_from?(cur_level) && next_node_at_level_outside_range?(cur_node, cur_level, range)
      cur_level -= 1
    end
    cur_node = unmark_forward_path_at_level(cur_node, cur_level, marker)
  end
  last_node = cur_node
  first_node.endpoint_of.delete(marker)
  if first_node.endpoint_of.empty?
    first_node.delete(path_to_first_node)
  end
  last_node.endpoint_of.delete(marker)
  if last_node.endpoint_of.empty?
    path_to_last_node = make_path
    find(range.last, path_to_last_node)
    last_node.delete(path_to_last_node)
  end
end