Нет большой разницы между стеком и списком, и документация по Scala API также говорит об этом.
При использовании списка другой подход к этому:
val result: (Option[T], List[T]) = myList match {
case first :: x :: rest => (Some(x), first :: rest)
case list => (None, list)
}
Ясный тип результата для ясности. Преимущество в том, что вы не будете выдавать исключение, если второго элемента нет, и это хороший пример того, как использовать сопоставление с образцом.