尝试在纯功能链表上 "remove by index" 时出现问题

Troubles when trying to "remove by index" on a Purely functional Linked List

如标​​题所述,我一直在尝试编写单链表及其在纯函数实现上的操作。到目前为止,一切都非常轻松,很多递归,没有修改......作品。

然后我尝试实现一个函数,在给定特定索引的情况下从列表中删除一个元素。我一辈子都找不到不使用计数器就可以实现的方法。这几乎就像在问自己,"how to I know how many steps I have walked without myself or an spectator counting them?".

从那以后我就一直低迷。

这是我目前的代码:

    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))
                }
            }
        }
    }

非常感谢您的帮助和意见。

简单易行:

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)
    )
}