You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala获取列表倒数第二个元素函数实现问题求助

解决方案

先梳理你现有代码的问题:

  • 第二个case case list +: Nil 匹配单元素列表并返回Some(list),但测试要求单元素列表返回None,这直接不符合需求。
  • 第一个case重复使用参数名list作为变量名,容易造成混淆,虽然语法合法但可读性差。

下面提供几种符合要求的正确实现:

方式一:模式匹配(直观清晰)

通过模式匹配直接匹配长度≥2的列表,提取倒数第二个元素,其余情况返回None:

def penultimate(list: List[Int]): Option[Int] = list match {
  case _ :+ penult :+ _ => Some(penult)
  case _ => None
}

方式二:List API 实现(简洁高效)

利用dropRight(1)移除列表最后一个元素,再通过lastOption获取剩余列表的最后一个元素(即原列表的倒数第二个),若剩余列表为空(原列表长度≤1)则自动返回None:

def penultimate(list: List[Int]): Option[Int] = list.dropRight(1).lastOption

方式三:明确边界处理

拆分空列表、单元素列表、长列表三种情况,逻辑更明确:

def penultimate(list: List[Int]): Option[Int] = list match {
  case Nil => None
  case _ :: Nil => None
  case xs => Some(xs.init.last)
}

以上三种实现均满足测试要求:空列表List()和单元素列表List(5)返回None,长度≥2的列表返回倒数第二个元素的Some包装值。

内容的提问来源于stack exchange,提问作者Borja Alamo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:50:21