尝试在纯功能链接列表上“按索引删除”时出现问题

时间:2020-05-30 16:35:10

标签: kotlin data-structures linked-list functional-programming purely-functional

正如标题所述,我一直在尝试在纯功能实现上对单链接列表及其操作进行编码。到现在为止,一切都很轻松,有很多递归,没有修改...这些作品。

然后我尝试实现给定索引的函数,以从列表中删除元素。我一生无法找到一种无需使用计数器即可实现此目标的方法。几乎就像在问自己:“我怎么知道我自己走了几步而没有自己或旁观者计数?”。

从那时起,我一直处于低迷状态。

这是我到目前为止的代码:

    fun <T> removeFromIndex(list:ListNode<T>?, index: Int):ListNode<T>?{
        if(list?.data == null){
            return list
        }
            else{
            when(index){
                0 -> remove(list)
                else -> {
                    when(listSize(list) - index){
                        0 -> {
                            return list
                        }
                        1 -> {
                            removeFromTail(list)
                        }
                        else -> {
                            TODO()//HOW?
                        }

                    }
                }
            }
        }
    }



fun <T> remove(list: ListNode<T>?):ListNode<T>?{
       return if(list?.data == null){
            list
        }
        else{
            list.next
        }
    }


fun <T> removeFromTail(list:ListNode<T>?):ListNode<T>?{
        return if(list?.data == null){
            list
        } else{
            when(list.next){
                null -> null
                else -> {
                    ListNode(list.data, removeFromTail(list.next))
                }
            }
        }
    }

非常感谢您的帮助和投入。

1 个答案:

答案 0 :(得分:1)

轻松自如:

fun <T> removeFromIndex(list:ListNode<T>?, index: Int):ListNode<T>? = when {
    list == null || index < 0 -> list
    index == 0 -> list.next
    else -> ListNode<T> (
        list.data,
        removeFromIndex(list.next, index-1)
    )
}