Kotlin 当你试着;“按索引删除”;关于纯函数链表
正如标题所述,我一直试图在纯功能性实现上对单个链表及其操作进行编码。到目前为止还很轻松的事情,很多递归,没有修改。。。作品 然后,我尝试实现一个函数,在给定某个索引的情况下,从列表中删除一个元素。我一辈子都找不到一种不用计数器就能实现的方法。这几乎就像在问我自己,“我怎么知道自己走了多少步,而没有自己或观众数?” 从那以后,我一直处于低迷状态 以下是我目前掌握的代码:Kotlin 当你试着;“按索引删除”;关于纯函数链表,kotlin,data-structures,linked-list,functional-programming,purely-functional,Kotlin,Data Structures,Linked List,Functional Programming,Purely Functional,正如标题所述,我一直试图在纯功能性实现上对单个链表及其操作进行编码。到目前为止还很轻松的事情,很多递归,没有修改。。。作品 然后,我尝试实现一个函数,在给定某个索引的情况下,从列表中删除一个元素。我一辈子都找不到一种不用计数器就能实现的方法。这几乎就像在问我自己,“我怎么知道自己走了多少步,而没有自己或观众数?” 从那以后,我一直处于低迷状态 以下是我目前掌握的代码: fun <T> removeFromIndex(list:ListNode<T>?, index
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 removeFromIndex(列表:ListNode?,索引:Int):ListNode{
如果(列表?.data==null){
返回列表
}
否则{
何时(索引){
0->删除(列表)
其他->{
何时(列表大小(列表)-索引){
0 -> {
返回列表
}
1 -> {
removeFromTail(列表)
}
其他->{
TODO()//怎么做?
}
}
}
}
}
}
乐趣移除(列表:ListNode?):ListNode{
如果返回(列表?.data==null){
列表
}
否则{
下一个
}
}
趣味removeFromTail(列表:ListNode?):ListNode{
如果返回(列表?.data==null){
列表
}否则{
何时(列表。下一步){
空->空
其他->{
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)
)
}
fun removeFromIndex(列表:ListNode?,索引:Int):ListNode?=什么时候{
列表==null | |索引<0->列表
索引==0->list.next
else->ListNode(
列表.数据,
removeFromIndex(list.next,index-1)
)
}
起初,在阅读您的答案时,我想“不,他是在递减索引,这不是纯粹的功能”,但您是在指定一个减法的值作为新索引,对吗?真不敢相信我竟然没有想到。这是一种一旦你得到,它就会发出咔嗒声的东西。谢谢你,马特!