Ваш новый объект Foo должен пройти по списку и найти, куда его нужно вставить. Но будьте осторожны, так как есть множество крайних случаев, которые могут испортить ваш список. Ваша логика должна работать в следующих ситуациях:
1) The new interval fits into an existing interval -- do nothing
2) The new interval begins and ends before the first interval --
insert it at the front of the list
3) The new interval stretches the existing start, end,
or both without cutting across adjacent intervals --
replace the start or end date on existing Foo.
4) The new interval begins after the end of the previous interval, but
ends after the beginning of the next interval --
walk the list with a sentinel until you find a Foo that begins before
the end of your new Foo. Delete the Foos that fall in
between the current Foo and the sentinel, adjusting the
end time if necessary.
5) The new interval begins after the end of the last interval --
insert it at the end of the list.
Возможно, мне не хватает граничного случая, но это модель, которую я использовал, когда мне пришлось решать очень похожую проблему.