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

如何在Kotlin单链表中实现查找满足谓词的最后一个节点?

开发任务
  • 编写名为lastWhere的方法,接受类型为(T) -> Boolean的where函数作为入参,返回最后一个符合where判断规则的T类型元素,无匹配元素时返回null。
  • 在给定的链表上调用lastWhere方法,查找价格低于10欧元的最后一个游戏。
实现方案

核心修改点说明

  1. 原有lastWhere方法仅返回链表尾节点,未做条件匹配:修改为遍历全链表时缓存所有符合条件的元素,遍历结束后返回最后一次缓存的符合条件的元素即可。
  2. main函数中的调用规则原有判断为价格>=10,调整为价格<10即可匹配需求。

完整可运行代码

class LinkedList<T> {
    data class Node<T>(val data: T, var next: Node<T>?)

    private var first: Node<T>? = null

    override fun toString(): String = first?.toString() ?: "-"

    fun isEmpty() = first == null

    fun addLast(data: T) {
        if (first == null) {
            first = Node(data, first)
            return
        }

        var runPointer = first
        while (runPointer?.next != null) {
            runPointer = runPointer.next
        }
        runPointer?.next = Node(data, null)
    }

    fun lastWhere (where: (T) -> Boolean): T? {
        if (isEmpty()) return null
        // 存储最后一个匹配的元素
        var matchedResult: T? = null
        var runPointer = first
        // 遍历所有节点
        while (runPointer != null) {
            // 符合条件就更新缓存的结果
            if (where(runPointer.data)) {
                matchedResult = runPointer.data
            }
            runPointer = runPointer.next
        }
        return matchedResult
    }

}

data class Game(val title: String, val price: Double)

fun main() {
    val list = LinkedList<Game>()
    list.addLast(Game("Minecraft", 9.99))
    list.addLast(Game("Overwatch", 29.99))
    list.addLast(Game("Mario Kart", 59.99))
    list.addLast(Game("World of Warcraft", 19.99))

    // 修改判断条件为价格低于10欧元
    val result = list.lastWhere { it.price < 10.00 }
    println(result)
}

运行输出

Game(title=Minecraft, price=9.99)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:15:01