The iterator solution may be the idiom of Scala, and it is clearly concise and understandable, but it is not functional - at any time when you call nexton the iterator, you are firmly in the country of side effects.
:
def fillGaps[A](gappy: List[Option[A]], filler: List[A]) =
gappy.foldLeft((List.empty[Option[A]], filler)) {
case ((current, fs), Some(item)) => (current :+ Some(item), fs)
case ((current, f :: fs), None) => (current :+ Some(f), fs)
case ((current, Nil), None) => (current :+ None, Nil)
}._1
gappy, : , .
, - Scala , , .